您好,欢迎来到尔游网。
搜索
您的当前位置:首页WebServices中XML、SOAP和WSDL的一些必要知识

WebServices中XML、SOAP和WSDL的一些必要知识

来源:尔游网
WebServices中XML、SOAP和WSDL的⼀些必要知识

Web Services 是由xml来定义数据格式的,通过SOAP协议在各个系统平台中传输,那么接下来讨论下SOAP和WSDL的各⾃作⽤。SOAP和WSDL对Web Service、WCF进⾏深⼊了解的基础,因此花⼀些时间去了解⼀下是很有必要的。

⼀、SOAP(Simple Object Access Protocol)

如果我们要调⽤远程对象的⽅法,就必定要告诉对⽅,我们要调⽤的是⼀个什么⽅法,以及这个⽅法的参数的值等等。然后对⽅把数据返回给我们。这其中就涉及到两个问题:1、数据如何在⽹络上传输。2、如何表⽰数据?⽤什么格式去表⽰函数以及它的参数等等。1、SOAP的传输协议

SOAP的传输协议使⽤的就是HTTP协议。只不过HTTP传输的内容是HTML⽂本,⽽SOAP协议传输的是SOAP的数据。看⼀下下⾯的例⼦:这是⼀个HTTP请求(请求google的⾸页)的内容:

GET / HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap,application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*Accept-Language: en-us

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CIBA) chromeframe/4.0Accept-Encoding: gzip, deflateConnection: Keep-AliveHost: www.google.com

Cookie: PREF=ID=d8f9f1710bfa5f72:U=a5b3bec86b33ef:NW=1:TM=1260238598:LM=1260241971:GM=1:S=q2agYsw3BsoOQMAs;

NID=29=JgIGDDUx70IQTBVAnNEP_E9PLLKBI9STjzaBjgq1eWuDg-_jCgFpka59DrOC0aZKLbj4q77HU1VMKscXTP3OaseyTbv3c2XPe9dS7lsXDHAkAnS46vy-OU8XRqbmxJ; rememberme=true;

SID=DQAAAH4AAABW7M4nVkTeOR7eJUmC1AJ4R6hYbmVewuy_uItLUTzZMUTpojdaHUExhPa_EPAkO9Ex1u3r7aPXZ5cj28xHnv2DbfRYf5AyaBcimciuOTITKSIkqn3QSpGDFkRS1Xn7EGzDpCVHSID=AFEFTMA68EgNjkbil; __utmx=173272373.; __utmxx=173272373.---------如果有Post的数据,这⾥还会有Post的数据--------这个是⼀个SOAP请求的内容:

POST /WebServices/WeatherWebService.asmx HTTP/1.1

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3603)Content-Type: text/xml; charset=utf-8

SOAPAction: \"http://WebXml.com.cn/getSupportCity\"Host: www.webxml.com.cnContent-Length: 348Expect: 100-continueConnection: Keep-Alive

⼴东

可以看到,⼀个SOAP请求其实就是⼀个HTTP请求,但为了表明内容是SOAP的数据,需要加⼊上⾯请求中红⾊字的部分来以⽰区别。也就是说,如果请求头中有SOAPAction这⼀段,那么请求会被当作SOAP的内容来处理⽽不会当作HTML来解析。可以⽤上⾯指定SOAPAction头来表⽰内容是SOAP的内容,也可以指定 Content-Type:

application/soap+xml 来表⽰内容是SOAP的内容。SOAP请求中最后的那段XML数据,这个就是请求的具体内容,这个就是SOAP规定的请求的数据格式,下⾯再详细对格式进⾏说明。

2、SOAP的数据格式

现在知道了SOAP是通过HTTP协议的POST⽅法来传输数据的,只不过是请求的Header中加了⼀些标志来说明⾃⼰是⼀个SOAP请求。那么数据的具体格式是怎么规定的呢,我们把上⾯请求的XML数据展开看⼀下:

⼴东

其中的⾥⾯的内容就是请求的内容,请求的⽅法为getSupportCity,该⽅法有⼀个名为byProvinceName的参数,参数的值为“⼴东”这个字符串。再看⼀下返回的内容:

HTTP/1.1 200 OK

Date: Mon, 14 Dec 2009 05:55:39 GMTServer: Microsoft-IIS/6.0X-Powered-By: ASP.NETX-AspNet-Version: 2.0.50727

Cache-Control: private, max-age=0Content-Type: text/xml; charset=utf-8Content-Length: 1052

⼴州 (59287)深圳 (59493)潮州 (59312)韶关 (59082)湛江 (59658)惠州 (59298)清远

(59280)东莞 (592)江门 (59473)茂名 (59659)肇庆 (59278)汕尾 (59501)河源 (59293)揭阳 (59315)梅州 (59117)中⼭ (59485)德庆 (59269)阳江 (59663)云浮 (59471)珠海 (59488)汕头 (59316)佛⼭ (59279)

返回的HTTP头中并没有标志来表明是⼀个SOAP的响应,因为的确没有必要,请求⽅发送出的SOAP请求,返回的肯定是SOAP的响应。⼀个典型的SOAP请求格式的结构如下:

234

Apples

下⾯逐个解释⾥⾯的元素:a) Envelope

SOAP的请求内容必须以Envelope做为根节点。

xmlns:soap=\"http://www.w3.org/2001/12/soap-envelope\",不能修改,否则会出错。http://www.w3.org/2001/12/soap-envelope⾥⾯有Envelope的schema的相关定义。有兴趣的可以去这个链接的内容。

soap:encodingStyle=\"http://www.w3.org/2001/12/soap-encoding\",这个指定了数据元素的类型。

b) Header

这个是可选的,如果需要添加Header元素,那么它必须是Envelope的第⼀个元素。

Header的内容并没有严格的,我们可以⾃⼰添加⼀些和应⽤程序相关的内容,但是客户端⼀定要记得处理这些Header元素,可以加上mustUnderstand强制进⾏处理。c) Body

这个就是请求的主题内容了,请求什么函数,参数是什么类型等等都在这⾥⾯指定。 ⽤标签表⽰⼀个函数,然后⽤⼦元素表⽰它的参数。

在调⽤中没有指定参数和返回类型,这⾥不需要指定,因为提供服务的⼀⽅⾃⼰已经规定好了数据类型,在调⽤时指定数据类型没有任何意义。

⼆、WSDL(Web Services Description Language)

  WSDL是⽤来描述WebService的,它⽤XML的格式描述了WebService有哪些⽅法、参数类型、访问路径等等。我们要使⽤⼀个WebService肯定⾸先要获取它的WSDL,在VS中添加⼀个Web 引⽤时,这些⼯作由开发环境帮我们做了,开发环境根据WSDL⽂档给Web Service⽣成了相应的代理类供我们使⽤。下⾯是⼀个HelloWorld的WebService的服务端代码:public class Service : System.Web.Services.WebService{

public Service () {

//Uncomment the following line if using designed components //InitializeComponent(); }

[WebMethod]

public DateTime HelloWorld(int i){

return DateTime.Now;}}

  其对应的WebService的WSDL⽂档如下:1

2 xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:mime=\"http://schemas.xmlsoap.org/wsdl/mime/\" xmlns:tns=\"http://tempuri.org/\"

xmlns:s=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://schemas.xmlsoap.org/wsdl/soap12/\" xmlns:http=\"http://schemas.xmlsoap.org/wsdl/http/\"targetNamespace=\"http://tempuri.org/\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\">3

4 5 6 7

8 9

10 11

12 13 14

15 16 17 18 19 20

21

22 23

24

25 26

27 28

29 30 31 32

33 34 35

36 37

38 39 40

41 42 43 44

45 46 47

48 49

50 51 52

53 54 55 56

57

58

59 60

61

62 63 65

⼀个WSDL⽂档由四部分组成:1、types

  指定了WebService⽤到的所有数据类型,上⾯⽤到了两种数据类型,int和datetime

2、message

  指明⼀个操作所⽤到的数据类型。

  HelloWorldSoapIn是指HelloWorld的输⼊操作⽤到的数据类型,HelloWorldSoapOut是指HelloWorld的输出操作⽤到的数据类型。⼆者的element元素指出了与types中对应到的具体类型。

3、portType

  指出了这个WebService所有⽀持的操作,就是说有哪些⽅法可供调⽤。

  这⾥⽀持⼀个HelloWorld调⽤,它的输⼊和输出对应到HelloWorldSoapIn和HelloWorldSoapOut这个两个数据类型。4、binding

  soap12:binding元素的transport指明传输协议,这⾥是http协议。  operation 指明要暴露给外界调⽤的操作。

  use属性指定输⼊输出的编码⽅式,这⾥没有指定编码。5、services

  指定服务的⼀些信息,主要是指定服务的访问路径。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- axer.cn 版权所有 湘ICP备2023022495号-12

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务