次の方法で共有


サービス プロキシ

サービス プロキシは、サービスのクライアント側プロキシです。 サービス プロキシを使用すると、アプリケーションはメソッド呼び出しとして チャネル 経由で メッセージを送受信できます。

サービス プロキシは、必要に応じて作成され、開き、サービスの呼び出しに使用され、不要になったら閉じられます。 または、アプリケーションでサービス プロキシを再利用して同じサービスに繰り返し接続することもできます。サービス プロキシを複数回初期化するために必要な時間とリソースを費やす必要はありません。 次の図は、サービス プロキシの考えられる状態と、ある状態から別の状態に至る関数呼び出しまたはイベントのフローを示しています。

サービス プロキシの状態と、ある状態から別の状態に至る関数呼び出しまたはイベントを示す図。

これらのサービス プロキシの状態は、WS_SERVICE_PROXY_STATE 列挙型に列挙されます。

上の図と次のコードに示すように、サービス プロキシは、WsCreateServiceProxy 関数の呼び出しによって作成されます。 この呼び出しのパラメーターとして、WWSAPI には次の列挙型が用意されています。

また、次のデータ型を使用して省略可能なパラメーターを受け入れます。

サービス プロキシが作成されると、WsCreateServiceProxy 関数は、out パラメーターを使用してサービス プロキシへの参照 WS_SERVICE_PROXY返します。

WS_SERVICE_PROXY* serviceProxy = NULL;
hr = WsCreateServiceProxy (
    WS_TCP_CHANNEL_BINDING, 
    WS_CHANNEL_TYPE_DUPLEX_SESSION, 
    NULL, 
    NULL, 
    0, 
    NULL,
    0,
    &serviceProxy, 
    error);

サービス プロキシが作成されると、アプリケーションは、WsOpenServiceProxy 関数を呼び出し、接続先のサービス エンドポイントのネットワーク アドレスを含む アドレス 構造体を渡すことで、サービスとの通信用にサービス プロキシを開くことができます。

WS_ENDPOINT_ADDRESS address = {0};
address.uri.chars = "net.tcp://localhost/example";
address.uri.length = wcslen("net.tcp://localhost/example";);
hr = WsOpenServiceProxy(serviceProxy, &address, NULL, error);

サービス プロキシを開くと、アプリケーションはそれを使用してサービスを呼び出すことができます。

hr = Add(
    serviceProxy, 
    1, 
    2, 
    &result, 
    NULL, 
    0, 
    NULL, 
    error);

アプリケーションでサービス プロキシが不要になったら、WsCloseServiceProxy 関数を呼び出してサービス プロキシを閉じます。 また、WsFreeServiceProxy呼び出すことによって、関連付けられているメモリを解放します。

hr = WsCloseServiceProxy(
    serviceProxy, 
    NULL, 
    error);
hr = WsFreeServiceProxy(
    serviceProxy, 
    error);

サービス プロキシの再利用

または、WsCloseServiceProxy呼び出した後、アプリケーションは、WsResetServiceProxy 関数を呼び出すことによって、サービス プロキシを再利用できます。

hr = WsResetServiceProxy(
    serviceProxy, 
    error);

さまざまなコンテキストでサービス プロキシを使用する方法の詳細については、次のトピックを参照してください。

安全

WWSAPI サービス プロキシ API を使用する場合は、次のアプリケーション設計に関する考慮事項に注意してください。

  • サービス プロキシは、Basic Profile 2.0 検証と XML シリアル化を超えてデータの検証を実行しません。 アプリケーションは、呼び出しの一部として受信したパラメーターに含まれるデータを検証する必要があります。
  • WS_PROXY_PROPERTY_MAX_PENDING_CALLSWS_PROXY_PROPERTY_ID 列挙値を使用して、サービス プロキシで保留中の呼び出しの最大数を構成すると、実行速度が遅いサーバーに対する保護が提供されます。 既定の最大値は 100 です。 アプリケーションでは、既定値の変更に注意する必要があります。
  • サービス プロキシは、サーバーとの通信に使用される WS_SECURITY_DESCRIPTION 構造で指定されているもの以外のセキュリティ保証を提供しません。
  • メッセージ を変更し、サービス プロキシの既定 チャネル するときは注意してください。 関連するプロパティを変更する前に、メッセージとチャネルに関連するセキュリティに関する考慮事項をお読みください。
  • サービス プロキシは、メモリ内に保持されるすべての資格情報を暗号化します。

次の API 要素は、サービス プロキシに関連しています。

コールバック 形容
WS_PROXY_MESSAGE_CALLBACK 入力メッセージのヘッダーが送信されようとしているとき、または出力メッセージ ヘッダーを受信したばかりの場合に呼び出されます。

 

列挙 形容
WS_CALL_PROPERTY_ID クライアント側のサービス操作で呼び出しを構成するための省略可能なパラメーターを列挙します。
WS_PROXY_PROPERTY_ID サービス プロキシを構成するための省略可能なパラメーターを列挙します。
WS_SERVICE_PROXY_STATE サービス プロキシの状態。

 

機能 形容
WsAbandonCall 指定したサービス プロキシで指定した呼び出しを破棄します。
WsAbortServiceProxy 指定したサービス プロキシで保留中のすべての入力と出力を取り消します。
WsCall 内部のみ。 引数をメッセージにシリアル化し、チャネル経由で送信します。
WsCloseServiceProxy 通信用のサービス プロキシを閉じます。
WsCreateServiceProxy サービス プロキシを作成します。
WsFreeServiceProxy サービス プロキシに関連付けられているメモリを解放します。
WsGetServiceProxyProperty 指定したサービス プロキシ プロパティを取得します。
WsOpenServiceProxy サービス エンドポイントへのサービス プロキシを開きます。
WsResetServiceProxy サービス プロキシをリセットします。

 

ハンドル 形容
WS_SERVICE_PROXY サービス プロキシを参照するために使用される不透明な型。

 

構造 形容
WS_CALL_PROPERTY 呼び出しプロパティを指定します。
WS_PROXY_PROPERTY. プロキシ プロパティを指定します。