3.2.3 Microsoft .NET Webサービス・クライアントのプログラミング・ツールキット

Microsoft .Net 1.1/2.0は、.Net SDKパッケージでwsdl.exeを提供しています。これはMicrosoftの無料の開発ツールキットです。SALTのsimpappサンプルでは、simpapp/dnetclientディレクトリに.Netプログラムが用意されています。

.Net Webサービスのプログラミングはわかりやすくて簡単です。wsdl.exeユーティリティとSALTのWSDLドキュメントを使用してスタブ・コードを生成し、スタブ・コードまたはバイナリの中の.Netオブジェクトをビジネス・ロジックの実装で参照します。

ヒント:

  • CARRAYに.NetプログラムのMIME添付バインディングを使用しないでください。

    MicrosoftはSOAP通信のMIMEバインディングをサポートしていません。.Net開発では、CARRAYのMIMEバインディングが指定されたWSDLドキュメントを使用しないでください。

    SALTは、CARRAYデータのbase64Binaryエンコーディング(デフォルトのWSDLドキュメントの生成)をサポートしています。

  • RPC/encodedスタイルのSOAPメッセージは、GWWSサーバーで認識されないことがあります。

    RPC/encodedスタイルでSALTのWSDLドキュメントを生成すると、.Netによってsoapenc:arrayTypeを含むSOAPメッセージが送信されます。SALTは、RPC/encodedスタイルでsoapenc:arrayTypeをサポートしません。RPC/encodedスタイルで生成されたWSDLドキュメントの例を次に示します:

    例: RPC/encodedスタイルで生成されたWSDLドキュメント

    <wsdl:types>
                         <xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:pack.TuxAll_typedef.salt11">
                                <xsd:complexType name="fml_TFML_In">
                                       <xsd:sequence>
                                              <xsd:element maxOccurs="60" minOccurs="60" name="tflong" type="xsd:long"></xsd:element>
                                              <xsd:element maxOccurs="80" minOccurs="80" name="tffloat" type="xsd:float"></xsd:element>
                                       </xsd:sequence>
                                </xsd:complexType>
                                <xsd:complexType name="fml_TFML_Out">
                                       …
    </xsd:complexType>
                         </xsd:schema>
                  </wsdl:types>

    回避策: .Netクライアントには、Microsoftが推奨するDocument/literalエンコーディング・スタイルを使用します。

  • RPC/encodedスタイルのxsd:base64Binaryに関するエラー・メッセージ

    SALTのWSDLドキュメントでxsd:base64BinaryがRPC/encodedスタイルで使用されている場合、wsdl.exeではスタブ・コードが生成されます。ただし、クライアント・プログラムでは、次のような実行時エラーが報告される可能性があります:System.InvalidOperationException:'base64Binary'は、SoapElementAttribute.DataTypeプロパティには無効な値です。プロパティはプリミティブ型のみに対して指定する場合があります。

    回避策:これは.Netフレームワークの問題です。

    .Netクライアントには、Microsoftが推奨するDocument/literalエンコーディング・スタイルを使用してください。