`

用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是做啥用的?
分享到:
评论

相关推荐

    C#利用Socket创建webservice

    在C#.net 3.5 2.0下,利用socket建立webservice服务,可与web页面进行数据通信,访问方式与webapi、webserve一样,端口号默认8081,在VS2013下运行正常。

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

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

    通过socket实现webservice的功能.rar

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

    CI与webservice

    CI中用socket实现webservice

    java调用net开发的webservice实例

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

    socket-支持断点续传java多线程下载

    运用socket进行断点续传; 1 从客户端读取版本及服务器地址等信息 2 通过webservice将本地版本号与服务器版本号进行比对,如果服务器发布的版本号大于客户端版本号,则从服务器查找要更新的文件。 3 启动主线程,...

    解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)

    您可能感兴趣的文章:PHP实现异步调用方法研究与分享PHP异步调用socket实现代码C#异步调用的好处和方法分享异步调用webservice返回responseXML为空的问题解决方法C# 委托的三种调用示例(同步调用 异步调用 异步回调...

    ExcelPanel Studio Demo

    ABBRIMAGE 缩略图 ADO OLE DB数据库 API Windows API封装 ...WEBSERVICE WEB服务调用与创建 WORDOUTLINE WORD大纲 WORDPLUGIN WORD插件(最新功能,如需要请联系作者,此示例需要购买) ZIP 压缩与解压缩功能

    接口框架:WebService与JerseyRESTful要点梳理

    不同于我们知道的Java接口(interface),此处的接口是指我们的...同样基于TCP的底层传输,使用websocket,但是要知道websocket基于HTTP协议设计,刚开始仍然是HTTP连接,后面才转换为Socket通道。这里一开始仍然是使用

    移动开发代码

    我们要调用到WebService接口,需要使用网络  而对于不同的平台socket的使用上有细微差异,我通过条件编译的方式,实现对不同平台的兼容。

    多层开发绝密文档.part2

    直接用ADODataSet例子.rar RO中间层设计方案.doc 数据交换平台规范.doc 网络游戏服务器组织结构分析.doc 远程调用技术代码追踪(RO第三方控件).doc 远程调用技术代码追踪(socket).doc 远程...

    多层开发绝密文档.part1

    直接用ADODataSet例子.rar RO中间层设计方案.doc 数据交换平台规范.doc 网络游戏服务器组织结构分析.doc 远程调用技术代码追踪(RO第三方控件).doc 远程调用技术代码追踪(socket).doc 远程...

    SAP对接农行做银企直联

    由于农业银行的银企业直联功能提供的的服务是SOCKET,不提供HTTP调用方式。但当前SAP不支持SOCKET,所以就在前置机上做了一个TOMCAT服务,使用JAVA开发,把农银的SOCKET转换为HTTP提供出来,以方便SAP使用,然后SAP...

    疯狂Android讲义(第2版)源代码 第10章~第13章

    第10章、Service与BroadcastReceiver 10.1、Service:Service的创建、配置、启动、停止、绑定和通信; Service的生命周期; 10.2、跨进程调用Service(AIDL服务):创建AIDL文件;... 13.5、使用WebService进行网络编程:

    Android实例代码

    13.5、使用WebService进行网络编程: 第14章、管理Android手机桌面 14.1、管理手机桌面: 14.2、改变手机壁纸: 14.3、桌面快捷方式: 14.4、管理桌面小控件: 14.5、实时文件夹(LiveFolder): 第15章、传感器...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    13.5、使用WebService进行网络编程: 第14章、管理Android手机桌面 14.1、管理手机桌面: 14.2、改变手机壁纸: 14.3、桌面快捷方式: 14.4、管理桌面小控件: 14.5、实时文件夹(LiveFolder): 第15章、传感器...

    source.zip

    29_发送xml数据和调用webservice.avi 所在项目:mobileAddressQuery & Web端应用:web 30_多线程下载原理.avi 所在项目:net 31_多线程断点下载器.avi 所在项目:MulThreadDownloader 32_文件断点上传器.avi 所在...

    8天快速掌握Android教程源码

    29_发送xml数据和调用webservice.avi 所在项目:mobileAddressQuery & Web端应用:web 30_多线程下载原理.avi 所在项目:net 31_多线程断点下载器.avi 所在项目:MulThreadDownloader 32_文件断点上传器.avi 所在...

Global site tag (gtag.js) - Google Analytics