WebService、WcfService和WcfRestService数据包的格式总结
?
WebService、WcfService和WcfRestService数据包的格式总结 准备工作: 使用VS 2010分别创建Asp.net WebService工程,WcfService工程,WcfRestService工程(工程模版需要在线下载,名称为“WCF REST Service Template 40(CS)”)和既支持WSDL又支持Rest的WcfService(创建方法会在下篇文章中介绍),然后分别在这四个工程中创建CloneObject接口,其实现如下: public List<CompositeType> CloneObject(CompositeType composite) { if (composite == null) { throw new ArgumentNullException("composite"); } List<CompositeType> lst = new List<CompositeType>(); lst.Add(composite); lst.Add(new CompositeType() { BoolValue=composite.BoolValue,StringValue="Clone " + composite.StringValue}); return lst; }
public class CompositeType { bool boolValue = true; string stringValue = "Hello "; public bool BoolValue { get { return boolValue; } set { boolValue = value; } } public string StringValue { get { return stringValue; } set { stringValue = value; } } }
? 工具准备: 1、SmartSniff来抓取网络数据包。 2、RESTClient工具来手工模拟Soap和Rest数据包,下载地址:http://ishare.iask.sina.com.cn/f/14712254.html?from=like ? 一、Asp.net WebService的收发格式: POST /Service1.asmx HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.4963) VsDebuggerCausalityData: uIDPo/kvik7siYRDlyTVRRP2DXgAAAAA1x0n85jS9EKUZEVmdJtUNXyQP/eirp9HqXBHCljHLvsACQAA Content-Type: text/xml; charset=utf-8 SOAPAction: "http://tempuri.org/CloneObject" Host: 192.168.2.249:8081 Content-Length: 383 Expect: 100-continue Connection: Keep-Alive ? <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><CloneObject xmlns="http://tempuri.org/"><composite><BoolValue>true</BoolValue><StringValue>Hello</StringValue></composite></CloneObject></soap:Body></soap:Envelope> ? ? HTTP/1.1 200 OK Cache-Control: private,max-age=0 Content-Type: text/xml; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNet-Version: 2.0.50727 X-Powered-By: ASP.NET Date: Fri,25 Nov 2011 04:43:59 GMT Content-Length: 542 ? <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><CloneObjectResponse xmlns="http://tempuri.org/"><CloneObjectResult><CompositeType><BoolValue>true</BoolValue><StringValue>Hello</StringValue></CompositeType><CompositeType><BoolValue>true</BoolValue><StringValue>Clone Hello</StringValue></CompositeType></CloneObjectResult></CloneObjectResponse></soap:Body></soap:Envelope> ? 小结: 1、把Request Header中的Content-Type去掉,返回“415.0 - Unsupported Media Type”错误。 2、把Request Header中的Content-Type替换为text/json; charset=utf-8,同时把Request Body的内容也替换为json格式,返回“415.0 - Unsupported Media Type”错误。 3、Request Header中的Content-Type和SOAPAction为必须项。 ? ? 二、WcfService的收发格式: POST /Service1.svc HTTP/1.1 Content-Type: text/xml; charset=utf-8 VsDebuggerCausalityData: uIDPozltUZVMCbxJnLU2jDSCQ9gAAAAA5T+R78gzqEmLlNDW+ZxgWRlMOMdmhblGrSJZCBz+nmYACQAA SOAPAction: "http://tempuri.org/IService1/CloneObject" Host: 192.168.2.249:8082 Content-Length: 357 Expect: 100-continue Accept-Encoding: gzip,deflate ? <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><CloneObject xmlns="http://tempuri.org/"><composite xmlns:a="http://schemas.datacontract.org/2004/07/SharpWcfService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><a:BoolValue>true</a:BoolValue><a:StringValue>Hello</a:StringValue></composite></CloneObject></s:Body></s:Envelope> ? ? HTTP/1.1 200 OK Content-Length: 532 Content-Type: text/xml; charset=utf-8 Server: Microsoft-IIS/7.5 X-Powered-By: ASP.NET Date: Fri,25 Nov 2011 05:34:56 GMT ? <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><CloneObjectResponse xmlns="http://tempuri.org/"><CloneObjectResult xmlns:a="http://schemas.datacontract.org/2004/07/SharpWcfService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><a:CompositeType><a:BoolValue>true</a:BoolValue><a:StringValue>Hello</a:StringValue></a:CompositeType><a:CompositeType><a:BoolValue>true</a:BoolValue><a:StringValue>Clone Hello</a:StringValue></a:CompositeType></CloneObjectResult></CloneObjectResponse></s:Body></s:Envelope> ? ? 小结: 1、把Request Header中的Content-Type去掉,返回“415.0 - Unsupported Media Type”错误。 2、把Request Header中的Content-Type替换为text/json; charset=utf-8,同时把Request Body的内容也替换为json格式,返回“415.0 - Unsupported Media Type”错误(WebInvoke的RequestFormat和ResponseFormat的设置在此都无效,如何支持json格式?)。 3、Request Header中的Content-Type和SOAPAction为必须项。 ? ? 三、WcfRestService的收发格式: ? POST /Service1/CloneObject HTTP/1.1 Content-Type: text/json; charset=utf-8 Content-Length: 39 Host: 192.168.2.249:8083 Connection: Keep-Alive User-Agent: Apache-HttpClient/4.0.1 (java 1.5) Expect: 100-Continue ? {"BoolValue":true,"StringValue":"test"} ? ? HTTP/1.1 200 OK Cache-Control: private Content-Length: 87 Content-Type: text/json; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Fri,25 Nov 2011 05:57:03 GMT ? [{"BoolValue":true,"StringValue":"test"},{"BoolValue":true,"StringValue":"Clone test"}] ? 改用xml格式请求该WecRestService POST /Service1/CloneObject HTTP/1.1 Content-Type: text/xml; charset=utf-8 Content-Length: 210 Host: 192.168.2.249:8083 Connection: Keep-Alive User-Agent: Apache-HttpClient/4.0.1 (java 1.5) Expect: 100-Continue ? <CompositeType xmlns="http://schemas.datacontract.org/2004/07/SharpWcfRestService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><BoolValue>true</BoolValue><StringValue>Hello</StringValue></CompositeType> ? HTTP/1.1 200 OK Cache-Control: private Content-Length: 351 Content-Type: text/xml; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Fri,25 Nov 2011 06:01:21 GMT ? <ArrayOfCompositeType xmlns="http://schemas.datacontract.org/2004/07/SharpWcfRestService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><CompositeType><BoolValue>true</BoolValue><StringValue>Hello</StringValue></CompositeType><CompositeType><BoolValue>true</BoolValue><StringValue>Clone Hello</StringValue></CompositeType></ArrayOfCompositeType> ? ? 小结: 1、把Request Header中的Content-Type去掉,返回“400 Bad Request”错误。 2、把Request Header中的Content-Type替换为text/json; charset=utf-8,同时把Request Body的内容也替换为json格式,同样能正确的返回结果。 3、Request Header中的Content-Type为必须项。 ? ? ? 四、支持RESTful的WcfService的收发格式: 使用VS.NET生成的代理类的访问格式(Soap格式): POST /Service1.svc HTTP/1.1 Content-Type: text/xml; charset=utf-8 VsDebuggerCausalityData: uIDPo37ZghDy+BNMsXzQ+pMEz2cAAAAAimYhgnq7uE2jaYbqWfU0WpBBztReWUBNhPN3rCdqMOcACQAA SOAPAction: "http://tempuri.org/IService1/CloneObject" Host: 192.168.2.249:8084 Content-Length: 364 Expect: 100-continue Accept-Encoding: gzip,deflate Connection: Keep-Alive ? <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><CloneObject xmlns="http://tempuri.org/"><composite xmlns:a="http://schemas.datacontract.org/2004/07/WcfService2RestService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><a:BoolValue>true</a:BoolValue><a:StringValue>Hello</a:StringValue></composite></CloneObject></s:Body></s:Envelope> ? ? HTTP/1.1 200 OK Cache-Control: private Content-Length: 539 Content-Type: text/xml; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Fri,25 Nov 2011 06:21:17 GMT ? <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><CloneObjectResponse xmlns="http://tempuri.org/"><CloneObjectResult xmlns:a="http://schemas.datacontract.org/2004/07/WcfService2RestService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><a:CompositeType><a:BoolValue>true</a:BoolValue><a:StringValue>Hello</a:StringValue></a:CompositeType><a:CompositeType><a:BoolValue>true</a:BoolValue><a:StringValue>Clone Hello</a:StringValue></a:CompositeType></CloneObjectResult></CloneObjectResponse></s:Body></s:Envelope> ? ? ? 使用Rest客户端的请求格式(Rest格式): POST /Service1/CloneObject HTTP/1.1 Content-Type: text/json; charset=utf-8 Content-Length: 39 Host: 192.168.2.249:8084 Connection: Keep-Alive User-Agent: Apache-HttpClient/4.0.1 (java 1.5) Expect: 100-Continue ? {"BoolValue":true,"StringValue":"test"} ? HTTP/1.1 200 OK Cache-Control: private Content-Length: 87 Content-Type: text/json; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Fri,25 Nov 2011 06:27:45 GMT ? [{"BoolValue":true,"StringValue":"Clone test"}] ? Rest客户端(指定Content-Type为xml) POST /Service1/CloneObject HTTP/1.1 Content-Type: text/xml; charset=utf-8 Content-Length: 212 Host: 192.168.2.249:8084 Connection: Keep-Alive User-Agent: Apache-HttpClient/4.0.1 (java 1.5) Expect: 100-Continue ? <CompositeType xmlns="http://schemas.datacontract.org/2004/07/WcfService2RestService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><BoolValue>true</BoolValue><StringValue>test</StringValue></CompositeType> ? HTTP/1.1 200 OK Cache-Control: private Content-Length: 352 Content-Type: text/xml; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Fri,25 Nov 2011 06:29:57 GMT ? <ArrayOfCompositeType xmlns="http://schemas.datacontract.org/2004/07/WcfService2RestService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><CompositeType><BoolValue>true</BoolValue><StringValue>test</StringValue></CompositeType><CompositeType><BoolValue>true</BoolValue><StringValue>Clone test</StringValue></CompositeType></ArrayOfCompositeType> ? 小结: 1、该服务支持Soap和Rest两种格式访问。 2、Rest格式访问的时候,同时支持XML和JSON格式,Request Header中的Content-Type为必须项。 3、Soap格式访问的时候,Request Header中的Content-Type和SOAPAction为必须项。? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |