【原】原生態手書き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があり、そのプロパティに使用するネーミングスペースが指定されています.今後の拡張を容易にするために、以下のネーミングスペースをすべて追加することをお勧めします.
ただし、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サブラベルがあり、すべてのカスタムデータ型がこのサブラベルの下に置かれています.サンプルコードは次のとおりです.
2、メッセージ定義.インタフェースを定義するための受信メッセージと送信メッセージ.すべてのメッセージの定義はwsdl:messageラベルに配置され、nameプロパティはメッセージの名前を指定し、後でポートを定義するときに使用されます.wsdl:messageラベルの下には、wsdl:partラベルがいくつかあり、各wsdl:partラベルはパラメータに対応します.サンプルコードは次のとおりです.
3、ポート定義.サービス提供のインタフェースを定義します.すべてのインタフェースはwsdl:portTypeラベルで定義され、nameプロパティはポートの名前を指定するために使用され、後でバインドするときに使用する必要があります.各インタフェースはwsdl:operationラベルで定義され、name属性はインタフェースの名前を指定します.一般的にphpで定義されたインタフェースの名前と同じです.入力メッセージと出力メッセージは、サブラベルwsdl:inputとwsdl:outputで指定されます.この2つのラベルのmessage属性値は、上記で定義したwsdl:messageラベルのname属性の値として指定する必要があります.サンプルコードは次のとおりです.
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/を参照してください.ここでは説明しません.サンプルコードは以下の通りです.
5、サービス.主に、上記で定義したバインドのサービスアドレスを指定します.ルートラベルwsdl:serviceの下には、上記で定義したwsdl:bindingラベルのname属性の値として指定する必要があるwsdl:portラベルが複数あります.wsdl:portラベルの下にsoap:addressのサブラベルがあり、そのlocationプロパティはWebServiceサービスを提供するphpファイルのアドレスです.サンプルコードは次のとおりです.
wsdlファイルの使用に関する注意事項は、私のこの文章:【原】wsdlの使用上の注意を参照してください.
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の使用上の注意を参照してください.