【原】原生態手書きwsdlファイル

17954 ワード

phpを使用してWebServiceを作成する場合は、1、wsdlファイルを使用しない2つの方法があります.この方式ではphpスクリプトのみがWebServiceにアクセスできます.2、wsdlファイルを使用します.この方式では、どのプラットフォームでも、どの言語でもwsdlファイルからWebServiceにアクセスできます.wsdlファイルはClient側とServer側の間の通信契約に相当します.またwsdlファイルには、Soap、HTTP GET、HTTP POSTなどのメッセージ転送の仕方を指定することもできる.次に、wsdlファイルを手書きする方法について説明します.wsdlファイルは実はxml形式の純粋なテキストファイルです.ルートラベルwsdl:definitionsがあり、そのプロパティに使用するネーミングスペースが指定されています.今後の拡張を容易にするために、以下のネーミングスペースをすべて追加することをお勧めします.
 1 <wsdl:definitions  2             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 3  xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
 4  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
 5  xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
 6  xmlns:tns="http://tempuri.org/Test/"
 7  xmlns:s="http://www.w3.org/2001/XMLSchema"
 8  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
 9  xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
10  targetNamespace="http://tempuri.org/Test/"
11  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
12 </wsdl:definitions>

ただし、targetNamespace="http://tempuri.org/Test/「およびxmlns:tns=」http://tempuri.org/Test/「このファイルのカスタムラベルと属性のネーミングスペースが共通に指定されています.この2つの属性の値は完全に同じでなければなりません.文字列」Test「変更できます.WebServiceによって異なる値があります.xmlns:tnsのtnsは、他の値に変更することもできます.変更後、以下で使用する場所は一致しなければなりません.ルート・ラベルの下には、タイプ定義、メッセージ定義、ポート定義、バインド、サービスの5つの部分が含まれています.以下では、1、タイプ定義について説明します.一部の内容はwsdl:typesラベルに含まれており、主にメッセージで使用するデータ型を定義し、W 3 C XMLモード内蔵型を基本型システムとして使用します.データ型の紹介については、この記事:http://www.cnblogs.com/newsouls/archive/2011/10/28/2227765.htmlを参照してください.   
wsdl:typesラベルの下にs:schemaサブラベルがあり、すべてのカスタムデータ型がこのサブラベルの下に置かれています.サンプルコードは次のとおりです.
 1 <wsdl:types>
 2     <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/Test/">
 3         <s:complexType name="DepartmentInfo">
 4             <s:sequence>
 5                   <s:element minOccurs="1" maxOccurs="1" name="index" type="s:int" />
 6                   <s:element minOccurs="1" maxOccurs="1" name="id" type="s:string" />
 7                   <s:element minOccurs="1" maxOccurs="1" name="name" type="s:string" />
 8              </s:sequence>
 9          </s:complexType>
10     </s:schema>
11 </wsdl:types>

2、メッセージ定義.インタフェースを定義するための受信メッセージと送信メッセージ.すべてのメッセージの定義はwsdl:messageラベルに配置され、nameプロパティはメッセージの名前を指定し、後でポートを定義するときに使用されます.wsdl:messageラベルの下には、wsdl:partラベルがいくつかあり、各wsdl:partラベルはパラメータに対応します.サンプルコードは次のとおりです.
1 <wsdl:message name="addIn">
2     <wsdl:part name="param1" type="s:int"/>
3     <wsdl:part name="param2" type="s:int"/>
4 </wsdl:message>
5 <wsdl:message name="addOut">
6     <wsdl:part name="Body" type="s:int"/>
7 </wsdl:message>

3、ポート定義.サービス提供のインタフェースを定義します.すべてのインタフェースはwsdl:portTypeラベルで定義され、nameプロパティはポートの名前を指定するために使用され、後でバインドするときに使用する必要があります.各インタフェースはwsdl:operationラベルで定義され、name属性はインタフェースの名前を指定します.一般的にphpで定義されたインタフェースの名前と同じです.入力メッセージと出力メッセージは、サブラベルwsdl:inputとwsdl:outputで指定されます.この2つのラベルのmessage属性値は、上記で定義したwsdl:messageラベルのname属性の値として指定する必要があります.サンプルコードは次のとおりです.
1 <wsdl:portType name="TestPortType">
2     <wsdl:operation name="add">
3         <wsdl:input message="tns:addIn" />
4         <wsdl:output message="tns:addOut" />
5     </wsdl:operation>
6 </wsdl:portType>

4、バインド.インタフェースとプロトコルをバインドします.すべてのバインド関係はwsdl:bindingラベルの下にあり、name属性はバインドの名前を指定するために使用され、後でサービスを定義するときに使用されます.typeプロパティは、上で定義したwsdl:portTypeラベルのnameプロパティの値に設定する必要があります.SOAPメッセージを使用して転送する場合、wsdl:bindingラベルの下にsoap:bindingサブラベルがあります.transportプロパティは転送プロトコルを指定するために使用されます.一般的にはhttp://schemas.xmlsoap.org/soap/http.各バインド関係のセットはwsdl:operationラベルであり、そのname属性はポート定義のwsdl:operationラベルのname属性と同じである必要があります.このラベルの下にsoap:operationラベルがあり、属性soapActionとstyleはsoap動作のアドレスと呼び出し方法を指定するために使用されます.soapActionの値はwsdl:definitionsルートラベルのtargetNamespaceプロパティで指定されたネーミングスペースにphpで定義されたインタフェースの名前を付けます.styleの値にはdocument(ドキュメント)とrpc(リモートプロシージャ呼び出し)の2種類があります.インタフェースの入出力のバインドはwsdl:inputとwsdl:outputラベルで指定されています.この2つのラベルにはサブラベルsoap:bodyがあり、use属性の値にはencoded(符号化方式)とliteralがあります.(文字形式).document、rpc、encoded、literalの具体的な意味については、この文書:http://blog.163.com/liuyb_94242/blog/static/4216764620132113914610/を参照してください.ここでは説明しません.サンプルコードは以下の通りです.
 1 <wsdl:binding name="TestBinding" type="tns:TestPortType">
 2     <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
 3     <wsdl:operation name="add">
 4         <soap:operation soapAction="http://tempuri.org/Test/add" style="document" />
 5              <wsdl:input>
 6                    <soap:body use="literal" />
 7              </wsdl:input>
 8              <wsdl:output>
 9                    <soap:body use="literal" />
10              </wsdl:output>
11     </wsdl:operation>
12 </wsdl:binding>

5、サービス.主に、上記で定義したバインドのサービスアドレスを指定します.ルートラベルwsdl:serviceの下には、上記で定義したwsdl:bindingラベルのname属性の値として指定する必要があるwsdl:portラベルが複数あります.wsdl:portラベルの下にsoap:addressのサブラベルがあり、そのlocationプロパティはWebServiceサービスを提供するphpファイルのアドレスです.サンプルコードは次のとおりです.
1 <wsdl:service name="TestService">
2     <wsdl:port name="TestServicePort" binding="tns:TestBinding">
3         <soap:address location="http://192.168.1.24:80/WebService/TestService/TestService.php" />
4     </wsdl:port>
5     <wsdl:port name="TestServicePort12" binding="tns:TestBinding12">
6         <soap12:address location="http://192.168.1.24:80/WebService/TestService/TestService.php" />
7     </wsdl:port>
8 </wsdl:service>

wsdlファイルの使用に関する注意事項は、私のこの文章:【原】wsdlの使用上の注意を参照してください.