サービス プロキシ
サービス プロキシは、サービスのクライアント側プロキシです。 サービス プロキシを使用すると、アプリケーションは、メソッド呼び出しとしてチャネル経由でメッセージを送受信できます。
サービス プロキシは、必要に応じて作成され、開き、サービスの呼び出しに使用され、不要になったら閉じられます。 または、アプリケーションでサービス プロキシを再利用して、サービス プロキシの初期化に必要な時間とリソースを複数回費やすことなく、同じサービスに繰り返し接続することもできます。 次の図は、サービス プロキシの考えられる状態と、ある状態から別の状態に至る関数呼び出しまたはイベントのフローを示しています。
これらのサービス プロキシの状態は、 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_ID 列挙値WS_PROXY_PROPERTY_MAX_PENDING_CALLSを使用して、実行速度 の遅いサーバーに対する保護を提供します。 既定の最大値は 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 | サービス プロキシをリセットします。 |
Handle | 説明 |
---|---|
WS_SERVICE_PROXY | サービス プロキシを参照するために使用される不透明な型。 |
構造体 | 説明 |
---|---|
WS_CALL_PROPERTY | 呼び出しプロパティを指定します。 |
WS_PROXY_PROPERTY。 | プロキシ プロパティを指定します。 |