RPC和文件Web服務之間存在許多差異,它們之間的重要區別如下:
以下是RPC樣式Web Service的重要特性:
讓我們看一下RPC樣式生成的WSDL檔案。
WSDL檔案:
在WSDL檔案中,它不指定型別詳細資訊。
<types/>
對於訊息部分,它定義名稱和型別屬性。
<message name="getHelloWorldAsString">
<part name="arg0" type="xsd:string"/>
</message>
<message name="getHelloWorldAsStringResponse">
<part name="return" type="xsd:string"/>
</message>
對於soap:body
,它定義了use
和namespace
屬性。
<binding name="HelloWorldImplPortBinding" type="tns:HelloWorld">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
<operation name="getHelloWorldAsString">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal" namespace="https://www.tw511.com/"/>
</input>
<output>
<soap:body use="literal" namespace="https://www.tw511.com/"/>
</output>
</operation>
</binding>
讓我們看一下文件樣式生成的WSDL檔案。
WSDL檔案:
在WSDL檔案中,它指定具有namespace
和schemaLocation
的型別詳細資訊。
<types>
<xsd:schema>
<xsd:import namespace="https://www.tw511.com/" schemaLocation="http://localhost:7779/ws/hello?xsd=1"/>
</xsd:schema>
</types>
對於訊息部分,它定義名稱和元素屬性。
<message name="getHelloWorldAsString">
<part name="parameters" element="tns:getHelloWorldAsString"/>
</message>
<message name="getHelloWorldAsStringResponse">
<part name="parameters" element="tns:getHelloWorldAsStringResponse"/>
</message>
對於soap:body
,它只定義use
屬性而不是namespace
。
<binding name="HelloWorldImplPortBinding" type="tns:HelloWorld">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="getHelloWorldAsString">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>