方法 : Windows 資格情報でサービスをセキュリティで保護する
ここでは、Windows ドメイン内に存在し、同じドメインのクライアントから呼び出される Windows Communication Foundation (WCF) サービスで転送セキュリティを有効にする方法について説明します。このシナリオ詳細については、 、「トランスポート セキュリティとWindows 認証」を参照してください。サンプル アプリケーションについては、「WSHttpBinding」のサンプルを参照してください。
このトピックでは、定義済みのコントラクト インターフェイスと実装が既に存在するものとして、それに機能を追加していきます。既存のサービスとクライアントを変更することもできます。
Windows 資格情報によるサービスのセキュリティ保護は、完全にコードで実現できます。または、構成ファイルを使用して、一部のコードを省略することもできます。このトピックでは両方の方法について説明します。ただし、どちらか 1 つの方法だけを使うようにして、両方は使用しないでください。
最初の 3 つの手順は、コードを使用してサービスをセキュリティで保護する方法について示しています。4 番目と 5 番目の手順は、構成ファイルを使用して同様の操作を行う方法について示しています。
コードの使用
サービスとクライアントの完全なコードは、このトピックの最後にある「使用例」のセクションに記載されています。
最初の手順では、コードで WSHttpBinding クラスを作成および構成する方法について説明します。バインディングでは HTTP トランスポートを使用します。同じバインディングがクライアント上で使用されます。
Windows 資格情報とメッセージ セキュリティを使用する WSHttpBinding を作成するには
この手順のコードは、「使用例」のセクションに記載されたサービス コードの
Test
クラスのRun
メソッドの先頭に挿入されています。WSHttpBinding クラスのインスタンスを作成します。
WsHttpSecurity クラスの Mode プロパティを Message に設定します。
MessageSecurityOverHttp クラスの ClientCredentialType プロパティを Windows に設定します。
この手順で使用するコードは、次のようになります。
サービスでのバインディングの使用
この 2 番目の手順では、自己ホスト型サービスでバインディングを使用する方法を示します。サービスのホスト詳細については、 、「ホスティング サービス」を参照してください。
サービスでバインディングを使用するには
前の手順のコードの後に、この手順のコードを挿入します。
contractType
という名前の Type 変数を作成し、その変数にインターフェイスの型 (ICalculator
) を割り当てます。Visual Basic を使用している場合は、GetType 演算子を使用し、C# を使用している場合は、typeof キーワードを使用します。serviceType
という名前の 2 つ目の Type 変数を作成し、その変数に実装されたコントラクトの型 (Calculator
) を割り当てます。baseAddress
という名前で、サービスのベース アドレスが指定された Uri クラスのインスタンスを作成します。ベース アドレスには、トランスポートに一致するスキームを指定する必要があります。この場合、トランスポート スキームは HTTP であり、アドレスは、特別な URI (Uniform Resource Identifier) の "localhost"、ポート番号 (8036)、およびベース エンドポイント アドレス ("serviceModelSamples/) で構成されます。つまり、https://localhost:8036/serviceModelSamples/ になります。serviceType
変数とbaseAddress
変数を指定して、ServiceHost クラスのインスタンスを作成します。contractType
、バインディング、およびエンドポイント名 (secureCalculator) を使用して、サービスにエンドポイントを追加します。クライアントは、サービスへの呼び出しを開始するときに、ベース アドレスとエンドポイント名を連結する必要があります。Open メソッドを呼び出してサービスを起動します。この手順で使用するコードは次のとおりです。
クライアントでのバインディングの使用
この手順では、サービスと通信するプロキシの生成方法を示します。プロキシは、ServiceModel Metadata Utility Tool (Svcutil.exe) によって生成されます。このツールは、サービス メタデータを使用してプロキシを作成します。
この手順では、サービスと通信するための WSHttpBinding クラスのインスタンスも作成され、サービスが呼び出されます。
この例では、コードだけを使用してクライアントを作成します。この手順の後のセクションに示す構成ファイルを使用することもできます。
コードによってクライアントでバインディングを使用するには
SvcUtil.exe ツールを使用して、サービスのメタデータからプロキシ コードを生成します。詳細な情報については、次のページを参照してください。 「方法 : Windows Communication Foundation クライアントを作成する」を参照してください。生成されたプロキシ コードは ClientBase クラスから継承しているので、各クライアントには、WCF サービスとの通信に必要なコンストラクタ、メソッド、およびプロパティが確実に定義されます。この例では、生成されたコードに、
ICalculator
インターフェイスを実装したCalculatorClient
クラスが追加されるので、サービス コードとの互換が可能になります。この手順のコードは、クライアント プログラムの
Main
メソッドの先頭に挿入します。WSHttpBinding クラスのインスタンスを作成し、そのセキュリティ モードを Message に、そのクライアント資格情報の種類を Windows に設定します。この例では、変数に
clientBinding
という名前を付けます。serviceAddress
という名前の EndpointAddress クラスのインスタンスを作成します。エンドポイント名が連結されたベース アドレスでインスタンスを初期化します。serviceAddress
変数とclientBinding
変数を指定して、生成されたクライアント クラスのインスタンスを作成します。次のコードに示すように、Open メソッドを呼び出します。
サービスを呼び出し、結果を表示します。
構成ファイルの使用
手順コードを使用してバインディングを作成する代わりに、構成ファイルのバインディング セクションに次のコードを記述することもできます。
まだサービスを定義していない場合は、「サービスの設計と実装」および「サービスの構成」を参照してください。
メモ この構成コードは、サービス構成ファイルとクライアント構成ファイルの両方で使用します。
構成を使用して Windows ドメインのサービスで転送セキュリティを有効にするには
構成ファイルの <bindings> 要素のセクションに <wsHttpBinding> 要素を追加します。
<WSHttpBinding> 要素に <binding> 要素を追加し、configurationName 属性をアプリケーションに適した値に設定します。
<security> 要素を追加し、mode 属性を Message に設定します。
<message> 要素を追加し、clientCredentialType 属性を Windows に設定します。
サービスの構成ファイルで、<bindings> セクションを次のコードに置き換えます。サービス構成ファイルがない場合は、「サービスとクライアントを構成するためのバインディングの使用」を参照してください。
<bindings> <wsHttpBinding> <binding name = "wsHttpBinding_Calculator"> <security mode="Message"> <message clientCredentialType="Windows"/> </security> </binding> </wsHttpBinding> </bindings>
クライアントでのバインディングの使用
この手順では、サービスと通信するプロキシと構成ファイルの 2 つのファイルの生成方法を示します。また、クライアント上で使用される 3 つ目のファイルであるクライアント プログラムへの変更点についても説明します。
構成によってクライアントでバインディングを使用するには
SvcUtil.exe ツールを使用して、サービスのメタデータからプロキシ コードと構成ファイルを生成します。詳細な情報については、次のページを参照してください。 「方法 : Windows Communication Foundation クライアントを作成する」を参照してください。
生成された構成ファイルの <Bindings> セクションを、前のセクションの構成コードに置き換えます。
手順コードは、クライアント プログラムの
Main
メソッドの先頭に挿入します。生成されたクライアント クラスのインスタンスを作成します。このとき、構成ファイルのバインディングの名前を入力パラメータとして渡します。
次のコードに示すように、Open メソッドを呼び出します。
サービスを呼び出し、結果を表示します。
例
関連項目
タスク
方法 : Windows Communication Foundation クライアントを作成する