Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Web クライアントの作成

Web クライアントは、Web サービスにアクセスするソフトウェアです。Web クライアントには、一連のプロキシ・メソッドが用意されています。各プロキシ・メソッドは、Web サービスのメソッドに対応しています。プロキシ・メソッドは、対応する Web サービス・メソッドと同じシグニチャを使用し、必要に応じて Web サービス・メソッドを呼び出します。この章では、Caché で Web クライアントを作成し、使用する方法を説明します。

Caché Web クライアントに対する SOAP 呼び出しをログに記録する方法については、このドキュメントで後述する “Caché SOAP ログ” を参照してください。

Note:

Caché Web サービスの場合、自動的に生成された WSDL には、SOAP ヘッダ要素に関する情報が含まれていないことがあります。

  • HeadersOut プロパティを設定することで、手動で SOAP ヘッダを追加する場合は、“カスタム・ヘッダ要素の追加と使用” の章の “サポート対象のヘッダ要素の指定” に示された手順を実行してください。これにより、すべての該当情報が WSDL に含まれるようになります。それ以外の場合は、これが行われなくなるため、WSDL をファイルに保存して、そのファイルを必要に応じて手動で編集することが必要になります。

  • SecurityOut プロパティ ("Caché Web サービスの保護" を参照) を設定して、WS-Security ヘッダ要素を追加した場合、WSDL には必要な情報の一部が含まれなくなります。(これは、コンパイル時に WSDL が生成され、その後の実行時にヘッダが追加されるためです。)この場合は、WSDL をファイルに保存して、そのファイルを必要に応じて手動で編集してください。

    多くの理由から、WS-Policy を使用することで、WS-Security 要素の追加が単純で簡単になります (同じドキュメントを参照)。WS-Policy を使用すると、生成された WSDL には必要な情報がすべて含まれます。

  • その他の場合は、生成された WSDL にすべての情報が含まれます。

W3C 仕様では、生成された WSDL を Web サービスが提供することを要求していない点に注意してください。

SOAP ウィザードの概要

Caché Web クライアントを作成するには、スタジオの SOAP ウィザードを使用するか、Caché に用意された対応するクラス・メソッドを使用します。どちらの場合も、入力は WSDL ドキュメントです。このツールでは、Web クライアント・クラスおよびサポートするすべての必要なクラスが生成されます。

このツールは、ほぼすべての WSDL ドキュメントで使用できます。最初の章の “Caché における WSDL のサポート” も参照してください。

WSDL の URL またはファイル・パスのいずれかを指定できます。

Note:

WSDL が SOAP 1.1 および SOAP 1.2 の両方のサポートを示す場合は、SOAP ウィザードは必要に応じて 2 つのクラスのセットを生成します。

SOAP ウィザードの使用法

スタジオに提供される SOAP ウィザードでは、特定の Web サービス、そのサービスの特定の WSDL のクライアントを生成できます。

Note:

SOAP ウィザードなどのテンプレート使用すると、スタジオでプロキシ・サーバを使用できます (有効な場合)。プロキシ・サーバとポートの指定については、"Caché インターネット・ユーティリティの使用法" の “プロキシ・サーバの使用法” を参照してください。

SOAP ウィザードを使用するには:

  1. WSDL を検証し、以下の項目を確認します。

    • <message> 要素に複数のパートが含まれていますか。

    • 応答メッセージで使用するタイプが複数のネームスペースに属していますか。

    いずれの場合も、その回答がはいの場合、後述の手順で説明する [ドキュメントスタイルのウェブメソッドでラップしないメッセージフォーマットを使用] オプションを選択する必要があります。

  2. [ツール]→[アドイン]→[SOAP ウィザード] をクリックします。

  3. 最初の画面で、次の手順を実行します。

    1. WSDL の場所に応じて、[URL] または [FILE] のいずれかをクリックします。

    2. WSDL の場所を入力します。WSDL の完全な URL または完全パスとファイル名のいずれかを入力してください。

    3. WSDL が、SSL を使用する場所にある場合 (つまり、URL が https で始まっている場合)、[SSL 構成] ドロップダウン・リストから適切な SSL 構成を選択します。SSL/TLS 構成の作成と管理の詳細は、"Caché セキュリティ管理ガイド" の “Caché での SSL/TLS の使用法” の章を参照してください。

      Important:

      このウィザードは、WSDL へのアクセスに使用する SSL 構成を指定します。このフィールドは、これ以外の方法では使用しません。

    4. WSDL が SSL を使用する場所にある場合、ウィザードは、証明書サーバ名がサーバへの接続に使用される DNS 名と一致するかどうかをチェックします (既定の動作)。これらの名前が一致していないと、接続は許可されません。この既定の動作は、“中間者” 攻撃を防止するもので、RFC 2818Opens in a new tab のセクション 3.1 に説明があります。また、RFC 2595Opens in a new tab のセクション 2.4 も参照してください。

      このチェックを無効にするには、[SSL 接続の確立にサーバ証明書のサーバ ID が接続先のシステムの名前と一致することを確認する] チェック・ボックスのチェックを外します。

  4. [次へ] をクリックします。

    次に、ウィザードは WSDL へのアクセスを試行して表示し、選択内容が正しいことをを確認できるようにします。

    ウィザードが WSDL にアクセスできない場合、エラーを示す画面が表示され、ユーザ名とパスワードの入力に使用できるオプションが示されます (多くの WSDL は、ユーザ名およびパスワードで保護されている URL にあり、これが WSDL へのアクセスに失敗する一般的な理由です)。このシナリオでは、最初に以下の手順の 1 つを実行します。

    • Caché のユーザ名とパスワードを指定する場合は、[CACHÉ ユーザ名とパスワード] を選択します

    • HTTP 基本認証のユーザ名とパスワードを指定する場合は、[HTTP 認証のユーザ名とパスワード] を選択します

    [ユーザ名] フィールドと [ユーザ名] フィールドに値を入力して、[再試行] をクリックします。ウィザードでは、これらの項目の入力は保存されない点に注意してください。

  5. WSDL を表示する画面で、以下のようにオプションを指定します。

    • [Web サービスのクライアントの作成] — Web クライアント・クラスを生成する場合は、このオプションを選択します。

    • [Web サービスの作成] — Web サービス・クラスを生成する場合は、このオプションを選択します。

    • [生成されたクラスをコンパイル] — クラスを生成した後でコンパイルする場合は、このオプションを選択します。

    • [コンパイル・フラグ] — コンパイラの動作を制御するフラグを指定します。コンパイラ・フラグに関する情報を取得するには、以下のコマンドを実行します。

       Do $System.OBJ.ShowFlags()
    • [クラスタイプ] — 生成されたタイプ・クラスで使用するタイプを選択します。

      • [Persistent] — このタイプ・クラスは、%PersistentOpens in a new tab から継承されます。コレクションは、リストとして定義される必要があります。

      • [一対多のリレーションシップを使用する Persistent] — このタイプ・クラスは %PersistentOpens in a new tab から継承され、コレクション・プロパティは一体多のリレーションシップとして定義されます。

      • [インデックス付きの一対多のリレーションシップを使用する Persistent] — リレーションシップのインデックスも定義されることを除いて前の項目と同じです。

      • [リレーションシップに親子を使用する Persistent] — このタイプ・クラスは %PersistentOpens in a new tab から継承され、コレクション・プロパティは親子のリレーションシップとして定義されます。

      • [Serial] — このタイプ・クラスは、%SerialObjectOpens in a new tab から継承されます。

      • [Registered] — このタイプ・クラスは、%RegisteredObjectOpens in a new tab から継承されます。

    • [カスケード削除するために %OnDelete メソッドをクラスに追加する] — 永続クラス・タイプを選択すると、このオプションが表示されます。このオプションを選択すると、ウィザードによりクラス定義が生成されるときに、これに %OnDelete() コールバック・メソッドの実装が含まれます。生成された %OnDelete() メソッドによって、クラスで参照されるすべての永続オブジェクトが削除されます。

      Note:

      [リレーションシップに親子を使用した永続化] を選択した場合は、このオプションを使用しないでください。

      生成されたクラスを変更する場合、必要に応じて必ず %OnDelete() コールバック・メソッドを変更してください。

    • [プロキシクラスパッケージ] — Web クライアントのパッケージ名を入力します。これは、生成されるすべてのタイプ・クラスのベース・パッケージとしても使用されます。既定のパッケージ名は、サービス名です。

      このパッケージが既存のパッケージと同じである場合、既定では、既存の同名のクラスが上書きされます。

  6. Ensemble がインストールされている場合は、オプションで以下の追加フィールドに値を指定します。

    • [ビジネス処理を作成する] — Ensemble のビジネス処理、関連する要求と応答のメッセージ・クラスを生成するにはこれを選択します。

    • [ビジネス処理パッケージ] — ビジネス処理クラスのパッケージを指定します。

    • [要求パッケージ] — 要求メッセージ・クラスのパッケージを指定します。

    • [応答パッケージ] — 応答メッセージ・クラスのパッケージを指定します。

    Ensemble の詳細は、Ensemble のドキュメントを参照してください。

  7. [次へ] をクリックします。ウィザードに次のような画面が表示されます。

  8. 以下のオプションを指定します。

    • [NAMESPACEクラスパラメータ追加]。このオプションは、以下のように、生成されたタイプ・クラスをネームスペースに割り当てる方法に影響します。

      • 指定されたタイプが属するネームスペースが WSDL で明示的に示されている場合は、[NAMESPACE クラス・パラメータを追加] はチェックが付けられた状態で、グレー表示になります。この場合、NAMESPACE クラス・パラメータがそのネームスペースに設定され、生成されたタイプ・クラスに組み込まれます。

      • 指定されたタイプのネームスペースを WSDL が示していない場合は、[NAMESPACE クラス・パラメータを追加] にチェックを付けるか、外すかを選択できます。

        このオプションにチェックを付けた場合、NAMESPACE クラス・パラメータが Web サービスのネームスペースに設定されて、生成されたタイプ・クラスに組み込まれます。

        このオプションのチェックを外した場合、生成されたタイプ・クラスに NAMESPACE クラス・パラメータは組み込まれません。

    • [ドキュメントスタイルのウェブメソッドでラップしないメッセージフォーマットを使用]。このオプションは、生成される Web クライアントのメソッド・シグニチャに影響します。付録 “生成されたクラスの詳細” と、この章で後述する “Caché Web クライアント・クラスの使用法” を参照してください。

      Important:

      使用する WSDL に複数のパートを持つ <message> 要素がある場合は、必ずこのオプションを選択してください。選択しないとウィザードがエラーになり、次のようなメッセージが表示されます。

      ERROR #6425: Element 'wsdl:binding:operation:msg:input' - message 'AddSoapOut' 
      Message Style must be used for document style message with 2 or more parts.
      

      同様に、応答メッセージで使用するタイプが相互に異なるネームスペースにある場合、必ずこのオプションを選択してください。

      このオプションは、SoapBindingStyle を "document" に設定したメソッドにのみ影響します。

    • [配列プロパティを作成しない]。このオプションは、ウィザードで配列プロパティを生成するかどうかを制御します。このオプションを選択すると、ウィザードでは、配列プロパティが生成されない代わりに別の形式が生成されます。付録 “生成されたクラスの詳細” の “配列プロパティの作成” を参照してください。

    • [nillable 要素の XMLNIL プロパティ・パラメータを生成]。このオプションは生成されたクラスの使用可能なプロパティに対して XMLNIL プロパティ・パラメータをウィザードで指定するかどうかを制御します。

      このオプションは nillable="true" で指定された XML 要素に対応する各プロパティに適用されます。このオプションを選択した場合、ウィザードにより XMLNIL=1 がプロパティ定義に追加されます。それ以外の場合、このパラメータの追加はありません。

      このプロパティ・パラメータの詳細については、"オブジェクトの XML への投影" の “空文字列および NULL 値の処理” を参照してください。

    • [nillable 要素の XMLNILNOOBJECT プロパティ・パラメータを生成]。このオプションは生成されたクラスの使用可能なプロパティに対して XMLNILNOOBJECT プロパティ・パラメータをウィザードで指定するかどうかを制御します。

      このオプションは nillable="true" で指定された XML 要素に対応する各プロパティに適用されます。このオプションを選択した場合、ウィザードにより XMLNILNOOBJECT=1 がプロパティ定義に追加されます。それ以外の場合、このパラメータの追加はありません。このパラメータの詳細は、"オブジェクトの XML への投影" の “空文字列および NULL 値の処理” を参照してください。

    • [XMLSEQUENCE パラメータを 0 に設定]。生成されるクラスの XMLSEQUENCE クラス・パラメータをウィザードによって設定する方法を制御します。

      ウィザードは既定では、生成されるクラスのこの値を 1 に設定します。これにより、クラスが WSDL のスキーマで指定された要素の順序に従います。この値は、スキーマに、特定の親の同じ名前の複数の要素がある場合に役立ちます。詳細は、"オブジェクトの XML への投影" の “複数の同名のタグを含むドキュメントの処理” を参照してください。

    • [1 に設定された XMLIGNORENULL パラメータを生成]。生成されるクラスの XMLIGNORENULL クラス・パラメータをウィザードで指定するかどうかを制御します。このオプションを選択した場合、ウィザードにより XMLIGNORENULL=1 が、生成される Web クライアント (または Web サービス) などのクラス定義に追加されます。それ以外の場合、このパラメータの追加はありません。

      このクラス・パラメータの詳細については、"オブジェクトの XML への投影" の “空文字列および NULL 値の処理” を参照してください。

    • [バイナリにストリームを使用]xsd:base64Binary タイプの要素をウィザードが処理する方法を制御します。このオプションを選択すると、対応するプロパティのタイプが %Stream.GlobalBinaryOpens in a new tab になります。このオプションを選択しないと、プロパティのタイプが %xsd.base64BinaryOpens in a new tab になります。

      ウィザードは、タイプが xsd:base64Binary属性を無視する点に注意してください。

    • [SECURITYIN クラス・パラメータを指定]。生成されるクライアント・クラスの SECURITYIN クラス・パラメータを制御します。Web サービス・セキュリティを使用している場合、クライアントにそれらの要素を要求するか、単純にそれらを検証するかで、REQUIRE または ALLOW を使用します。そうでない場合は、IGNORE または IGNOREALL が一般に適しています。詳細は、"Caché Web サービスの保護" の “WS-Security ヘッダの検証” を参照してください。

      Important:

      SECURITYIN パラメータは、関連付けられた (そしてコンパイルされた) 構成クラスにセキュリティ・ポリシーがある場合、無視されます。"Caché Web サービスの保護" を参照してください。

  9. 必要に応じて、パッケージ名を編集します。ウィザードでは、パッケージ名に次の規則を使用します。

    • [Web クライアント・パッケージ] または [Web サービス・パッケージ] に指定されているパッケージには、生成された主な Web クライアント・クラスまたは Web サービス・クラスが含まれます。これらの値は、ウィザードの前のページでのエントリによって初期化されます。

    • ウィザードでポリシー・クラスも生成される場合 (WSDL に WS-Policy 情報が含まれているため)、そのクラスは既定で同じパッケージに含まれます。別のパッケージを指定するには、[構成サブパッケージ] で値を指定します。

      既定では、このクラス名は、Web クライアント名または Web サービス名に Config を追加したものです。[構成サブパッケージ] に値を指定すると、この生成されたクラスの名前が Web クライアントまたは Web サービスと同じになります (ただし、代わりにこのクラスは指定されたサブパッケージ内に含まれます)。

      WS-Policy については、"Caché Web サービスの保護" を参照してください。

    • 生成されるどのサポート・クラスに対しても、ウィザードによって WSDL で使用されているすべてのネームスペースが検出されます。既定では、生成されたクラスはパッケージに分類されます (ネームスペースごとに 1 つのパッケージ)。

      必要に応じて、これらのパッケージ名を編集します。

      すべてのネームスペースが生成されたクラスに対応するとは限りません。例えば、この例の WSDL はネームスペース http://schemas.xmlsoap.org/wsdlhttp://schemas.xmlsoap.org/wsdl/mime、および http://schemas.xmlsoap.org/wsdl/soap を使用します。この場合、これらのネームスペースには生成されたクラスがなく、対応するパッケージは生成されません。

  10. [次へ] をクリックします。ウィザードによって、クラスが生成およびコンパイルされ、これらのクラスの一覧が表示されます。

  11. [完了] をクリックします。

Tip:

WSDL URL の使用中にウィザードに問題が発生した場合は、WSDL をファイルとして保存し、そのファイルを入力として使用して再試行してください。

外部で定義されたエンティティへの参照が WSDL に含まれている場合、ウィザードがそれらの解決を試行します。このタスクのタイムアウト期間は 10 秒です。

これらのクラスのプロパティについては、スキーマ内の対応する要素の名前がアンダースコア (_) で始まる場合、そのプロパティの名前はパーセント記号 (%) で始まります。

プログラムによるクライアント・クラスの生成

プログラムによってクライアント・クラスを生成することもできます。これには、%SOAP.WSDL.ReaderOpens in a new tab クラスを使用します。

結果として生成されたクラスとそれらの構成は、SOAP ウィザードを使用した場合と異なることがあります。SOAP ウィザードでは、生成されたクラスのパッケージに対してより詳細な管理を行うことができます。

プログラムによってクライアント・クラスを生成する手順は以下のとおりです。

  1. %SOAP.WSDL.ReaderOpens in a new tab のインスタンスを作成します。

  2. 必要に応じて、インスタンスの動作を制御するプロパティを設定します。詳細は、%SOAP.WSDL.ReaderOpens in a new tab のクラス・ドキュメントを参照してください。

    WSDL が SSL を使用する場所にある場合、%SOAP.WSDL.ReaderOpens in a new tab は、証明書サーバ名がサーバへの接続に使用される DNS 名と一致するかどうかをチェックする (既定の動作) 点に注意してください。これらの名前が一致していないと、接続は許可されません。この既定の動作は、“中間者” 攻撃を防止するもので、RFC 2818Opens in a new tab のセクション 3.1 に説明があります。また、RFC 2595Opens in a new tab のセクション 2.4 も参照してください。

    このチェックを無効にするには、インスタンスの SSLCheckServerIdentity プロパティを 0 に設定します。

  3. %SOAP.WSDL.ReaderOpens in a new tab で直接サポートされていない方法で HTTP 要求を制御できるようにする必要がある場合は、以下の手順を実行します。

    1. %Net.HttpRequestOpens in a new tab のインスタンスを作成し、必要に応じてプロパティを設定します。

    2. %SOAP.WSDL.ReaderOpens in a new tab のインスタンスに対して、作成した %Net.HttpRequestOpens in a new tab のインスタンスと同じ HttpRequest プロパティを設定します。

  4. インスタンスの Process() メソッドを呼び出します。

    method Process(pLocationURL As %String, pPackage As %String = "") as %Status 
    
    • pLocationURL は、Web サービスの WSDL の URL、または WSDL ファイルの名前 (完全パスを含む) でなければなりません。Web サービスの構成によっては、適切なユーザ名とパスワードを指定する文字列を追加する必要があります。例を参照してください。

    • pPackage は、生成されたクラスを配置するパッケージの名前です。パッケージを指定しないと、Caché は、サービス名をパッケージ名として使用します。

      Note:

      このパッケージが既存のパッケージと同じである場合、既定では、既存の同名のクラスが上書きされます。クラス定義が上書きされないようにするには、クラス定義に次の指定を追加します。

      Parameter XMLKEEPCLASS = 1;

ターミナル・セッションの例を以下に示します。

set r=##class(%SOAP.WSDL.Reader).%New() 
GSOAP>set url="http://localhost:57772/csp/gsop/GSOP.AddComplexWS.CLS?WSDL=1"
 
GSOAP>d r.Process(url) 
Compilation started on 11/09/2009 12:53:52 with qualifiers 'dk'
Compiling class AddComplex.ns2.ComplexNumber
Compiling routine AddComplex.ns2.ComplexNumber.1
Compilation finished successfully in 0.170s.
 
Compilation started on 11/09/2009 12:53:52 with qualifiers 'dk'
Compiling class AddComplex.AddComplexSoap
Compiling routine AddComplex.AddComplexSoap.1
Compiling class AddComplex.AddComplexSoap.Add
Compiling routine AddComplex.AddComplexSoap.Add.1
Compilation finished successfully in 0.363s.

WSDL URL は、Web アプリケーションの一部です。Web アプリケーションは、パスワード認証によって保護されている可能性があります。このような場合に WSDL を使用して Caché Web クライアントまたはサードパーティの Web クライアントを生成する方法の詳細は、このドキュメントで後述の “パスワードで保護された WSDL URL の使用法” を参照してください。

どのような場合でも、必要なユーザ名とパスワードを指定した後、ブラウザから WSDL を取得して、これをファイルとして保存し、そのファイルを代わりに使用することもできます。

生成された Web クライアント・クラスの変更

通常は、Caché Web クライアント・クラスを生成した後で、そのクラスを編集することはありません。その代わりに、Web クライアントのインスタンスを作成するコードと、クライアント側のエラー処理を提供するコードを記述します。このセクションでは、生成されたクライアント・クラスに変更を加える際の主な例外について説明します。

生成されたクラスの Web メソッドに関するその他の注意事項” のセクションと、“Caché Web クライアントの調整” の章も参照してください。

Note:

生成された Web クライアント・クラスのサブクラスは作成しないでください。コンパイラは、適切な実行に必要なサポート・クラスを生成しないため、そのサブクラスは使用できなくなります。

生成されたクラスを長い文字列に合わせて調整する方法

場合によっては、生成されたクライアント・クラスを、長い文字列または長いバイナリ値に対応できるように編集する必要があります。

SOAP ウィザードで WSDL を読み取る場合、Caché では文字列タイプの入出力を %StringOpens in a new tab として表現できることが前提となっていますが、そのように表現できないこともあります。文字列によっては、Caché の 32 KB という文字列制限を超える可能性がありますが、WSDL 内には、このことを SOAP ウィザードに通知するための情報が含まれていません。

同様に、Caché では XML タイプ base64Binary の入出力をすべて %xsd.base64BinaryOpens in a new tab として表現できることが前提となっていますが、長い文字列に関する同様の制限のため、そのように表現できないこともあります。WSDL 内には、この入出力が長い文字列に関する制限を超えている可能性があることを SOAP ウィザードに通知するための情報が含まれていません。

いずれの場合も、Caché で長い文字列演算を有効化している場合、Web クライアントは機能します。

一方、Caché で長い文字列演算を有効にしていない場合は、Web クライアントが長すぎる文字列またはバイナリ値を検出すると、次のエラーのいずれかが発生します。

  • <MAXSTRING> エラー

  • データ型検証エラー

    ERROR #6232: Datatype validation failed for tag your_method_name ...
    

    (当然ながら、このエラーはデータ型の不一致が原因で発生することもあります。)

ただし、この問題は簡単に修正できます。これらの入出力に長い値が存在すると予期される場合は、生成された Web クライアント・クラス (特に、%SOAP.WebClientOpens in a new tab から継承されたクラス) のメソッド・シグニチャを、適切なストリーム・クラスを使用するように調整します。

例えば、引数を取らず 32 KB を超える非常に長い文字列を返すメソッドが 1 つ (WriteIt) 含まれる Web サービス (MyGiantStringService) について考えてみます。SOAP ウィザードを使用して Web クライアント・クラスを生成すると、Web クライアント・クラスは最初は次のようになります。

Class GetGiantString.MyServiceSoap Extends %SOAP.WebClient
{

Method WriteIt() As %String 
[Final,SoapBindingStyle=document,SoapBodyUse=literal,WebMethod]
{
 Quit ..WebMethod("WriteIt").Invoke(##this,"http://tempuri.org/MyApp.MyGiantStringService.WriteIt")
}

}

この場合、行う調整は 1 つだけです。WriteIt の返りタイプを次のように変更します。

Method WriteIt() As %GlobalCharacterStream 
[Final,SoapBindingStyle=document,SoapBodyUse=literal,WebMethod]
{
 Quit ..WebMethod("WriteIt").Invoke(##this,"http://tempuri.org/MyApp.MyGiantStringService.WriteIt")
}

このクラスをコンパイルすると、関連するクラスが必要に応じて自動的に再生成されます。

生成されたタイプのクラス内のプロパティ・タイプの調整が必要な場合があります。例えば、タイプ文字列の要素 <ContainerPart> が組み込まれた <Container> という要素を Web サービスで使用しているとします。Caché Web クライアント・クラスを生成すると、タイプ %StringOpens in a new tabContainerPart プロパティによって Container クラスが作成されます。Web サービスから <ContainerPart> 要素で 32 KB を超える長い文字列が送信され、長い文字列演算が有効化されていない場合は、Web クライアントでエラーが発生します。このエラーを回避するには、ContainerPart プロパティのタイプを %GlobalCharacterStreamOpens in a new tab に変更します。

その他の調整

WSDL が Web サービスの場所を指定しない場合、SOAP ウィザードは Web クライアントの LOCATION パラメータを指定しません。これは一般的なケースではありません。このシナリオでは、Web クライアント・クラスを編集して LOCATION パラメータを含めるようにします。例えば以下のようになります。

Parameter LOCATION = "http://localhost:57772/csp/gsop/GSOP.AddComplexWS.cls";

または、Web クライアント・インスタンスの Location プロパティを、この章で後から示すように指定します。

Web クライアント・クラスの他のパラメータを調整して、その他の変更を加える必要がある場合があります。詳細は、“Caché Web クライアントの調整” の章を参照してください。

生成された Web クライアント・クラスの使用法

前述のセクションで説明したように、通常は、Caché Web クライアント・クラスを生成した後で、そのクラスを編集することはありません。その代わりに、その Web クライアントのインスタンスを作成するコードと、クライアント側のエラー処理を提供するコードを記述します。このコードでは、以下の処理を実行します。

  1. Web クライアント・クラスのインスタンスを作成します。

  2. インスタンスのプロパティを設定します。ここでは、以下のような項目を制御できます。

    • Web クライアントのエンドポイント (Web クライアントで使用する Web サービスの URL)。制御するには、Location プロパティを設定します。これは、Web クライアント・クラスの LOCATION パラメータをオーバーライドします。

    • プロキシ・サーバを指定する設定。

    • 基本の HTTP ユーザ認証を制御する設定。

    この章の次のセクションと “Caché Web クライアントの調整” の章を参照してください。

  3. 必要に応じて、Web クライアントのメソッドを呼び出します。

  4. クライアント側のエラー処理を実行します。“SOAP フォルトの処理” を参照してください。

  5. この章で後述するように、オプションで、Web クライアントが受け取る HTTP 応答を検証します。

ターミナルのセッションからの簡単な例を以下に示します。

GSOAP>set client=##class(Proxies.CustomerLookupServiceSoap).%New()

GSOAP>set resp=client.GetCustomerInfo("137")
 
GSOAP>w resp
 
11@Proxies.CustomerResponse

GSOAP>w resp.Name
Smith,Maria

例 1 : ラップされたメッセージを使用するクライアントの使用法

この例では、ラップされたメッセージを使用する Web クライアントのラッパ・クラスを作成します。前に示した GSOAPClient.AddComplex.AddComplexSoap の例を使用するために、次のようなクラスを作成します。

Class GSOAPClient.AddComplex.UseClient Extends %RegisteredObject
{

ClassMethod Add(arg1 As ComplexNumber, arg2 As ComplexNumber) As ComplexNumber
{
    Set client=##class(AddComplexSoap).%New()
    //uncomment the following to enable tracing
    //set client.Location="http://localhost:8080/csp/gsop/GSOP.AddComplexWS.cls"
    Set ans=client.Add(arg1,arg2)
    Quit ans 
}

}

クライアント・アプリケーションは、Web メソッドを実行するために、このメソッドを呼び出します。

例 2 : ラップされていないメッセージを使用するクライアントの使用法

この例では、ラップされていないメッセージを使用する Web クライアントのラッパ・クラスを作成します。前に示した GSOAPClient.AddComplex.AddComplexSoap の例を使用するために、次のようなクラスを作成します。

Class GSOAPClient.AddComplexUnwrapped.UseClient Extends %RegisteredObject
{

ClassMethod Add(arg1 As GSOAPClient.AddComplexUnwrapped.s0.ComplexNumber, 
arg2 As GSOAPClient.AddComplexUnwrapped.s0.ComplexNumber) 
As GSOAPClient.AddComplexUnwrapped.s0.ComplexNumber
{
    //create the Add message
    Set addmessage=##class(GSOAPClient.AddComplexUnwrapped.s0.Add).%New()
    Set addmessage.a = arg1
    Set addmessage.b = arg2

    Set client=##class(AddComplexSoap).%New()
    
    //send the Add message to client and get response
    Set addresponse=client.Add(addmessage)
    
    //get the result from the response message
    Set ans=addresponse.AddResult
    
    Quit ans
 
}

}

このメソッドには、普通に想定されるシグニチャがあります。つまり、このメソッドは 2 つの複素数を受け取り、1 つの複素数を返します。このメソッドは Web クライアントが必要とするメッセージを作成します。このメッセージの要素は 2 つの複素数です。

サンプル・コードを見るとわかるように、ラップされていないメッセージを Web クライアントで使用する場合は、ユーザにわかりやすい形式の引数を Web クライアントで使用するメッセージに変換する必要があるので、作成するコード量が若干多くなります。

Web クライアント・インスタンスのプロパティの調整

Web クライアント・クラスのインスタンスを使用するとき、そのインスタンスのプロパティを指定して動作を制御できます。このセクションでは、一般的に設定することが多いプロパティとその既定値について説明します。

Web クライアントのエンドポイントの変更

SOAP ウィザードでは、Web クライアントの LOCATION パラメータを設定することにより、Web クライアントにエンドポイントが自動的に設定されます。既定では、このパラメータは、通信する Web サービスの URL と同じに設定されます。

この設定を変更するには、Web クライアント・インスタンスの Location プロパティを設定します。Location が NULL の場合に、LOCATION パラメータが使用されます。

一般的な使用法の 1 つとして、トレースを有効にするために別のポートを使用するように Location プロパティを設定します。例えば、生成された Web クライアント・クラスでエンドポイントが次のように定義されているとします。

Parameter LOCATION = "http://localhost:57772/csp/gsop/GSOP.AddComplexWS.cls";

このクライアントを使用するときに、次の行を追加します。

   Set client.Location="http://localhost:8080/csp/gsop/GSOP.AddComplexWS.cls"
Note:

WSDL が Web サービスの場所を指定しない場合、SOAP ウィザードは Web クライアントの LOCATION パラメータを指定しません。これは一般的なケースではありません。このシナリオでは、Web クライアント・クラスを編集して LOCATION パラメータを含めるようにするか、または Web クライアント・インスタンスの Location プロパティをここに示すように指定します。

SSL を使用するようにクライアントを構成する方法

Web クライアントのエンドポイントで HTTPS プロトコルを使用する場合は、SSL を使用するようにその Web クライアントを構成する必要があります。具体的には以下のとおりです。

  • まだ作成していない場合は、管理ポータルを使用して、必要な SSL 接続の詳細を格納する SSL/TLS 構成を作成します。詳細は、"Caché セキュリティ管理ガイド" の “Caché での SSL/TLS の使用法” の章を参照してください。

  • Web クライアントの SSLConfiguration プロパティを SSL/TLS 構成名に等しくなるように設定します。

プロキシ・サーバ経由でクライアントを接続している場合は、Web クライアントで HttpProxySSLConnect プロパティを 1 に設定する必要もあります。プロキシ・サーバを使用するように Caché Web クライアントを構成する方法の詳細は、“Web クライアントの調整” の章を参照してください。

SOAP バージョンの指定

SOAP ウィザードでは、Web サービスの WSDL で使用している SOAP バージョンに基づいて、要求メッセージで使用する SOAP バージョンが自動的に指定されます。具体的には、SOAPVERSION パラメータが設定されます。

この設定を変更するには、Web クライアント・インスタンスの SoapVersion プロパティを設定します。以下の値のいずれかを使用します。

  • "" — クライアントは SOAP 1.1 メッセージを送信します。

  • "1.1" — クライアントは SOAP 1.1 メッセージを送信します。

  • "1.2" — クライアントは SOAP 1.2 メッセージを送信します。

SoapVersion が NULL の場合に、SOAPVERSION パラメータが使用されます。

その他の調整

Web クライアント・インスタンスの他のプロパティを設定して、その他の変更を加える必要がある場合があります。詳細は、“Caché Web クライアントの調整” の章を参照してください。

HTTP 応答の使用法

既定では、Web クライアント・メソッドを呼び出す場合、HTTP 経由で呼び出されます。HTTP 応答は、Web クライアント・インスタンスの HttpResponse プロパティとして使用できるようになります。このプロパティは %Net.HttpResponseOpens in a new tab のインスタンスであり、以下のようなプロパティが含まれています。

  • Headers には、HTTP 応答のヘッダが含まれます。

  • Data は、HTTP 応答のデータを格納する Caché 多次元配列です。

  • StatusCodeStatusLine、および ReasonPhrase はステータス情報を提供します。

詳細は、"Caché インターネット・ユーティリティの使用法" のドキュメントを参照してください。または、%Net.HttpResponseOpens in a new tab のクラス・ドキュメントを参照してください。

FeedbackOpens in a new tab