サービス ホスト

サービス ホストは、プロセス内でサービスをホストするためのランタイム環境です。

サービスは、サービス ホスト内で 1 つ以上のエンドポイントを構成できます。

サービス エンドポイントを含むサービス ホストの構造を示す図。

サービス ホストの作成

サービス ホストを作成する前に、サービスでエンドポイントを定義する必要があります。 サービス ホスト内のエンドポイントは 、WS_SERVICE_ENDPOINT 構造で指定され、次の情報によって定義されます。

WS_SERVICE_ENDPOINT serviceEndpoint = {0};
const WS_SERVICE_ENDPOINT* serviceEndpoints[1];
serviceEndpoints[0] = &serviceEndpoint;
WS_STRING url = WS_STRING_VALUE(L"net.tcp://+/Example");

// Method based service contract for the service
static WS_SERVICE_CONTRACT calculatorContract = 
{
    &calculatorContractDescription, // comes from a generated header.
    NULL,
    &calculatorFunctions, // specified by the application
};

serviceEndpoint.address.url = &url;
serviceEndpoint.binding.channelBinding =  WS_TCP_CHANNEL_BINDING; 
serviceEndpoint.contract = &calculatorContract;  
serviceEndpoint.channelType = WS_CHANNEL_TYPE_DUPLEX_SESSION; 
serviceEndpoint.authorizationCallback = AuthorizationCallback; // Authorization callback.

UDP 経由の SOAP では、一方向コントラクトのみがサポートされます。これは、WS_CHANNEL_BINDING列挙のWS_UDP_CHANNEL_BINDING によって表されます。

エンドポイントを定義した後は、 wsCreateServiceHost 関数に渡すことができます。この関数は、 WS_SERVICE_ENDPOINT 構造体へのポインターの配列を受け取ります。

HRESULT hr = WsCreateServiceHost (serviceEndpoints, 1, NULL, 0, &host, error);

アプリケーションは、必要に応じて WsCreateServiceHostサービス プロパティの配列を提供して、サービス ホストでカスタム設定を構成できます。

アプリケーションによってサービス ホストが開き、クライアント要求の受け入れが開始されます。

WsOpenServiceHost(serviceHost, NULL, NULL);

サービス ホストを開いた後、必要な操作がなくなった場合、アプリケーションはそれを閉じることができます。 これによりリソースは解放されず、 WsResetServiceHost の後続の呼び出しで再度開くことができることに注意してください。

WsCloseServiceHost(serviceHost, NULL, NULL);

サービス ホストを閉じた後、アプリケーションは再利用のためにサービス ホストをリセットできます。

WsResetServiceHost(serviceHost, NULL);

アプリケーションがサービス ホストで完了すると、 WsFreeServiceHost 関数を呼び出すことによって、サービス ホストに関連付けられているリソースを解放できます。 この関数を呼び出す前に 、WsCloseServiceHost を呼び出す必要があることに注意してください。

WsFreeServiceHost(serviceHost, NULL);

カスタム状態をサービス ホストにアタッチする方法については、「ユーザー ホストの状態」を参照してください。

特定のエンドポイントのサービス ホストでの承認の詳細については、「サービスの 承認」を参照してください。

サービスのサービス操作とサービス コントラクトの実装に関する情報については、 サービス操作サービス コントラクトに関するトピックを参照してください。

セキュリティ

アプリケーションは、followin プロパティを使用して、サービス ホストがアプリケーションに代わって割り当てるリソースの量を制御できます。

これらのプロパティごとにセキュリティで保護された既定値が選択されます。これらのプロパティを変更する場合は、アプリケーションで注意する必要があります。 上記のプロパティを超えて、 チャネルリスナーおよびメッセージ 固有のプロパティもアプリケーションによって変更できます。 これらの設定を変更する前に、これらのコンポーネントのセキュリティに関する考慮事項を参照してください。

さらに、WWSAPI サービス ホスト API を使用する場合は、次のアプリケーション設計に関する考慮事項を慎重に評価する必要があります。

  • MEX を使用する場合、アプリケーションは機密データを開示しないように注意する必要があります。 軽減策として、MEX を介して公開されるデータの性質が機密性の高い場合、アプリケーションは、少なくとも認証を必要とするセキュリティで保護されたバインディングを使用して MEX エンドポイントを構成し、 WS_SERVICE_SECURITY_CALLBACKを使用してエンドポイントの一部として承認を実装することを選択できます。
  • 既定では、エラーによるリッチ エラー情報は、 WS_SERVICE_PROPERTY_FAULT_DISCLOSURE プロパティによってサービス ホストで無効になっています。 障害の一部として豊富なエラー情報を送信することは、アプリケーションの裁量に基づいて行われます。 ただし、情報漏えいが発生する可能性があるため、この設定はデバッグ シナリオでのみ変更することをお勧めします。
  • Basic Profile 2.0 および XML シリアル化に対して実行される検証以外に、サービス ホストはサービス操作パラメーターの一部として受信したデータ コンテンツに対して検証を実行しません。 すべてのパラメーター検証を単独で実行するのは、アプリケーションの責任です。
  • 承認は、サービス ホストの一部として実装されません。 ただし、アプリケーションは、 WS_SECURITY_DESCRIPTIONとWS_SERVICE_SECURITY_CALLBACK を使用して 独自の承認スキームを実装できます。
  • エンドポイントでセキュリティで保護されたバインディングを使用するのは、アプリケーションの責任です。 サービス ホストは、エンドポイントで構成されているセキュリティを超えるセキュリティを提供しません。

サービス ホストでは、次の API 要素が使用されます。

コールバック 説明
WS_SERVICE_ACCEPT_CHANNEL_CALLBACK サービス ホストによってエンドポイント リスナーでチャネルが受け入れられたときに呼び出されます。
WS_SERVICE_CLOSE_CHANNEL_CALLBACK エンドポイントでチャネルが閉じられたり中止されたりしたときに呼び出されます。

 

列挙 説明
WS_SERVICE_ENDPOINT_PROPERTY_ID WS_SERVICE_ENDPOINTを構成するための省略可能なパラメーター。
WS_SERVICE_HOST_STATE サービス ホストが存在できることを示します。
WS_SERVICE_PROPERTY_ID サービス ホストを構成するための省略可能なパラメーター。

 

機能 説明
WsAbortServiceHost サービス ホストに対する現在の操作を中断および中止します。
WsCloseServiceHost クライアントから新しいチャネルが受け入れられないように、すべてのリスナーを閉じます。
WsCreateServiceHost サービス ホストを作成します。
WsFreeServiceHost サービス ホスト オブジェクトに関連付けられているメモリを解放します。
WsGetServiceHostProperty 指定したサービス ホスト プロパティを取得します。
WsOpenServiceHost 通信用のサービス ホストを開き、すべてのエンドポイントでリスナーを開始します。
WsResetServiceHost 再利用のためにサービス ホストをリセットし、基になるチャネルとリスナーをリセットして再利用します。

 

Handle 説明
WS_SERVICE_HOST サービス ホストを参照するために使用される不透明な型。

 

構造体 説明
WS_SERVICE_ENDPOINT サービス ホスト上の個々のエンドポイントを表します。
WS_SERVICE_ENDPOINT_PROPERTY サービス固有の設定を指定します。
WS_SERVICE_PROPERTY サービス固有の設定を指定します。
WS_SERVICE_PROPERTY_ACCEPT_CALLBACK チャネルが正常に受け入れられたときに呼び出されるコールバックを指定します。
WS_SERVICE_PROPERTY_CLOSE_CALLBACK チャネルが閉じようとしているときに呼び出されるコールバックを指定します。