`

用socket调用webservice

    博客分类:
  • FAQ
阅读更多
一直对webservice的底层实现很好奇,想通过比较底层的方式调用到webservice,webservice是通过http协议来通信的,交互的是soap消息,是不是发送一个特定格式的http请求,就可以调用到webservice呢?鼓捣了半天,终于通过下面的方式调到了。
Socket socket = new Socket("127.0.0.13",8080);
		
		OutputStream os = socket.getOutputStream();
		InputStream is = socket.getInputStream();
		
		String httpSend = "POST /ngcrm/services/bsf/iface_crmServiceForCs HTTP/1.1\r\n"
						+ "Content-Type:text/xml\r\n"
						+ "Host:127.0.0.1:8080\r\n"
						+ "Content-Length:454\r\n"
						+ "\r\n"
						+ "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"
						+ 	"<SOAP-ENV:Body>"
						+ "	</SOAP-ENV:Body>"
						+ "</SOAP-ENV:Envelope>";
		os.write(httpSend.getBytes());
		os.flush();

		InputStreamReader ireader = new InputStreamReader(is);
		java.io.BufferedReader breader = new java.io.BufferedReader(ireader);
		
		String responseLine = "";
		
		while(!(responseLine = breader.readLine()).equals(""))
		{
			System.out.println(responseLine);
		}
		
		System.out.println("");
		
		while(!(responseLine = breader.readLine()).equals(""))
		{
			System.out.println(responseLine);
		}

利用socket来连接远程服务器,然后发送一个http请求,可以看出这个http请求和普通的http请求并没有太大的区别,他的请求体是一个标准的soap消息,其中如下请求行
POST /ngcrm/services/bsf/iface_crmServiceForCs HTTP/1.1
Content-Type:text/xml
Host:127.0.0.1:8080
Content-Length:454

是必须的,缺少任何一个都会调不到service。
具体的实现应该是这样:发送http请求的含义应该是,通过socket和服务器建立连接后,把一个二进制流发送到服务器,服务器端接收到这个二进制流后进行解析,如果格式合法,就会认为是一个合法的HTTP请求,然后处理这个http请求。根据请求的路径来判断是不是webservice,如果是就会利用服务器端的处理机制来处理这个service,执行相应的java类。处理完毕返回一个http响应,并且把soap消息体放到响应正文中,然后客户端解析这个soap消息,根据命名空间来产生java类的实例。
下面是调用结束后,返回的http响应:
Set-Cookie: sna_cookie=FFEF6102631A1DA90BBB03CDC164808D04A538FFE21F8AD8DB02B5B8937AC743; Path=/
Content-Type: text/xml;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 03 Nov 2010 03:57:47 GMT

165
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body>
</soap:Body></soap:Envelope>
0



另我很疑惑的是http响应体的开头和结尾的165和0是做啥用的?
分享到:
评论

相关推荐

    socket多线程调用webservice服务实现系统对接

    利用socket thread dom4j log4j axis2 soap PBE加解密等相关技术实现的socket协议调用webservice服务。 由于银行后台核心系统普遍采用的是UNIX下C/C++的开发平台,如果需要调Web Service往往需要借助一些第三方的库...

    C#利用Socket创建webservice

    【C#利用Socket创建Web服务】是通过C#编程语言基于.NET Framework 3.5或2.0版本,使用Socket类来实现的一种自定义通信协议的服务。Socket在计算机网络编程中扮演着重要的角色,它是应用层与传输层的接口,允许程序...

    webservice和socket简单例子

    WebService是一种基于标准的、平台无关的、可互操作的远程调用机制,它使用XML(Extensible Markup Language)作为数据交换格式,通过HTTP(HyperText Transfer Protocol)进行传输。主要由WSDL(Web Services ...

    多线程socket+webservice操作demo

    - 使用注解(如`@WebService`、`@SOAPBinding`)定义服务接口和实现类。 - 通过`WSDL`(Web Service Description Language)文件暴露服务。 2. **发布Web Service** - 使用JAX-WS的工具(如`wsimport`)生成...

    通过socket实现webservice的功能.rar

    1、Socket基本概念 Socket又称"套接字",应用程序通常通过"套接字"向网络...3、学习WebService可以将你的服务(一段代码)发布到互联网上让别人去调用,也可以调用别人机器上发布的WebService,就像使用自己的代码一样.。

    http和WebService 调用接口Java代码demo

    对于SOAP-based的Web Service,Java开发者可以使用`@WebService`注解定义服务端接口,`@WebServiceClient`定义客户端调用。以下是一个简单的例子: ```java @WebService(targetNamespace = ...

    远程调用技术代码追踪(socket) 之二

    在本文中,我们将聚焦于使用Socket和WebService这两种远程调用技术,并探讨代码追踪和底层实现细节。 首先,Socket通信是网络编程的基础,它提供了进程间的低级别通信接口。在远程调用中,Socket用于建立客户端和...

    CI与webservice

    CI中用socket实现webservice

    基于Webservice的数据访问.docx

    Webservice 工作原理可以分为两种:通过 Socket 实现 C/S 和通过 Webservice 实现 C/S。 在 C/S 架构中,客户端向服务器发送请求,服务器处理请求并返回结果。Webservice 使得不同的应用程序能够通过网络进行通讯,...

    c#WINFORM与WEB的直接交互非webservice方法

    然而,当WinForm应用需要与Web应用进行数据交换时,我们通常会想到使用WebService或API。但是,有时我们可能希望避免这些额外的服务层,直接与Web服务器进行交互,这可能是因为性能考虑或者是为了简化架构。 以下是...

    springmvc整合webservice加整合socket

    整合Spring MVC、Webservice和Socket,可以构建一个既能够作为Webservice服务端接收并处理请求,也可以作为客户端调用其他Webservice的服务。同时,通过Socket可以实现实时的数据同步和推送功能,提升用户体验。 ...

    WebService数据交互事例

    在Flex应用中,我们可以通过以下步骤调用WebService: 1. 在onRequest()方法中触发WebService的调用,如调用HelloWorld()。 2. 在onSuccess()方法中处理调用成功后的响应,打印出服务返回的信息。 3. 在onFault()...

    外部接口文档webService socket josn

    外部接口文档,特别是涉及到WebService、Socket和JSON的交互,是现代软件开发中不可或缺的部分,它们主要用于不同系统间的数据交换和服务调用。本文将详细解析这些接口类型以及相关的技术和安全考虑。 1. **...

    Android通过WebService访问SQLServer

    开发者可以使用IIS搭建SOAP WebService,以供Android客户端调用。 4. **Android访问WebService**: 在Android端,我们可以使用`HttpURLConnection`或`HttpClient`类进行HTTP请求,但现代Android开发推荐使用`...

    java调用net开发的webservice实例

    java调用net开发的webservice实例下载 问题终于解决了,之前加上?wsdl的时候报如下错: - I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect - Retrying ...

    调用https格式的webservice jar包。

    这些库通常包括SSL/TLS协议的实现,如Java中的JSSE(Java Secure Socket Extension)。在提供的压缩包文件“lib”中,可能包含了一些必要的jar包,比如: 1. **ssl.jar**:包含SSL和TLS的实现,用于建立安全的网络...

    webservice

    通过以上分析可以看出,WebService不仅限于使用Socket通信实现,还可以通过XML、SOAP、RESTful API等多种方式来实现。对于需要实时性和可靠性较高的场景,如天气查询服务,采用TCP协议并通过Socket实现是一个不错的...

    基于SuperSocket的消息推送详细说明文档1

    - .NET Webservice:基础使用技巧。 - SuperSocket:服务端向特定客户端推送消息的开源库。 - IIS部署:程序发布与部署。 - TCP/IP:端口管理及Redis基础操作。 - 心跳数据包:维持长连接,防止TCP假死。 - ...

    Qt下gsoap访问webservice小程序

    soap.init_socket(); // 初始化网络连接 if (!soap.connect("http://example.com/myWebService")) // 连接到Web服务 { // 错误处理 } int result = soap.myWebService_addNumbers(5, 3); // 调用Web服务操作 soap....

Global site tag (gtag.js) - Google Analytics