• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • WebService描述語言WSDL詳解(3)

    發表于:2007-05-25來源:作者:點擊數: 標簽:WebServiceWSDL描述詳解語言
    Namespace <definitions>和子節點<schema>都是namespace屬性: <definitions name="FooSample" targetNamespace="http://tempuri.org/wsdl/" xmlns:wsdlns="http://tempuri.org/wsdl/" xmlns:typens="http://tempuri.org/xsd" xmlns:xsd="http://www.w3
    Namespace

     ?。糳efinitions>和子節點<schema>都是namespace屬性:

    <definitions name="FooSample"
     targetNamespace="http://tempuri.org/wsdl/"
     xmlns:wsdlns="http://tempuri.org/wsdl/"
     xmlns:typens="http://tempuri.org/xsd"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
     xmlns:stk="http://schemas.microsoft.com/soap-toolkit/wsdl-extension"
     xmlns="http://schemas.xmlsoap.org/wsdl/">

    <types>
    ?。約chema targetNamespace="http://tempuri.org/xsd"
      xmlns="http://www.w3.org/2001/XMLSchema"
      xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
      elementFormDefault="qualified" >
    ?。?schema>
    </types>

      每個namespace屬性都聲明了一個縮略語,用在文檔中。例如"xmlns:xsd"就為 http://www.w3.org/2001/XMLSchema定義了一個縮略語(xsd)。這就允許對該namespace的引用只需簡單的在名字前加上前綴就可以了,如:"xsd:int"中的"xsd"就是合法的類型名。普通范圍規則可運用于縮略前綴。也就是說,前綴所定義的元素只在元素中有效。

      Namespace派什么用?namespace的作用是要避免命名沖突。如果我建立一項Web Service,其中的WSDL文件包含一個名為"foo"的元素,而你想要使用我的服務與另一項服務連接作為補充,這樣的話另一項服務的WSDL文件就不能包含名為"foo"的元素。兩個服務器程序只有在它們在兩個事例中表示完全相同的東西時,才可以取相同的名字。如果有了表示區別的namespace,我的網絡服務里的"foo"就可以表示完全不同于另一個網絡服務里"foo"的含義。在你的客戶端里,你只要加以限制就可以引用我的"foo"。

      見下例:http://www.infotects.com/fooService#foo 就是完全限制的名字,相當于"carlos:foo",如果我聲明了carlos作為http://www.infotects.com/fooService的快捷方式。請注意namespace中的URL是用來確定它們的唯一性的,同時也便于定位。URL所指向的地方不必是實際存在的網絡地址,也可以使用GUID來代替或補充URL。例如,GUID"335DB901-D44A-11D4-A96E-0080AD76435D"就是一個合法的namespace指派。

      targetNamespace屬性聲明了一個namespace,元素中所有的聲明的名字都列于其內。在WSDL示例中,<definitions>的targetNamespace 是http://tempuri.org/wsdl。這意味著所有在WSDL文檔中聲明的名字都屬于這個namespace。<schema>元素有自己的targetNamespace屬性,其值為 http://tempuri.org/xsd ,在<schma>元素中定義的所有名字都屬于這個namespace而不是main的target namespace。

     ?。約chema>元素的以下這行聲明了默認的namespace。Schema中所有有效的名字都屬于這個namespace。

    xmlns=http://www.w3.org/2001/XMLSchema

    SOAP消息

      對于使用WSDL的客戶機和服務機來說,研究WSDL文件的一種方法就是決定什么來接受所發送的信息。盡管SOAP使用底層協議,如IP和HTTP等,但應用程序決定了服務器與客戶機之間交互的高級協議。也就是說,進行一項操作,比如"echoint"把輸入的整數送回,參數的數目、每個參數的類型、以及參數如何傳送等因素決定了應用程序特定的協議。有很多方法可以確定此類協議,但我相信最好的方法就是使用WSDL。如果我們用這種視角來看待它,WSDL不只是一種接口協議,而且是一種協議特定的語言。它就是我們超越"固定"協議(IP、HTTP等)所需要的應用程序特定協議。

      WSDL可以確定SOAP消息是否遵從RPC或文檔風格。RPC風格的消息(就是示例中所用的)看起來像是函數調用。而文檔風格的消息則更普通,嵌套層次更小。下面的XML消息就是示例WSDL文件解析后的發送/接受效果,解析使用的是MS SOAP Toolkit 2.0(MSTK2)中的SoapClient對象。

      從客戶端調用"foo(5131953)"函數:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    ?。糞OAP-ENV:Envelope
      SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
      xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    ?。糞OAP-ENV:Body>
     ?。糾:foo xmlns:m="http://tempuri.org/message/">
      ?。糰rg>5131953</arg>
     ?。?m:foo>
    ?。?SOAP-ENV:Body>
      </SOAP-ENV:Envelope>
     從服務器接受的信息:
     ?。?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <SOAP-ENV:Envelope
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
    <SOAPSDK1:fooResponse xmlns:SOAPSDK1="http://tempuri.org/message/">
    <result>5131953</result>
    </SOAPSDK1:fooResponse>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>


      兩函數都調用了消息,其回應是有效的XML。SOAP消息由幾部分組成,首先是<Envelop>元素,包含一個可選的<Header>元素以及至少一個<body>元素。Rpc函數所調用的消息體有一個根據操作"foo"命名的元素,而回應信息體有一個"fooResponse"元素。Foo元素有一個部分<arg>,就和WSDL中描述的一樣,是單參數的。fooResponse也相應的有一個<result>的部分。注意encodingStyle、envelope和message的namespace和WSDL Bindings欄中的預定義的一致,重復如下:

    <binding name="SimpleBinding" type="wsdlns:SimplePortType">
    <stk:binding preferredEncoding="UTF-8" />
    <soap:binding style="rpc"
    transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="foo">
    <soap:operation
    soapAction="http://tempuri.org/action/Simple.foo"/>
    <input>
    <soap:body use="encoded"
    namespace="http://tempuri.org/message/"
    encodingStyle=
    "http://schemas.xmlsoap.org/soap/encoding/" />
    </input>
    <output>
    <soap:body use="encoded"
    namespace="http://tempuri.org/message/"
    encodingStyle=
    "http://schemas.xmlsoap.org/soap/encoding/" />
    </output>
    </operation>
    </binding>

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>