方法 : WCF クライアントで WSE 3.0 サービスにアクセスする
Windows Communication Foundation (WCF) クライアントが WS-Addressing 仕様の 2004 年 8 月版を使用するように構成されている場合、WCF クライアントは Microsoft .NET サービスの Web サービス拡張 (WSE: Web Services Enhancements) 3.0 とネットワーク レベルの互換性があります。ただし、WSE 3.0 サービスは MEX (Metadata Exchange) プロトコルをサポートしていないため、Service Metadata Utility Tool (SvcUtil.exe) を使用して WCF クライアント クラスを作成したときに、生成された WCF クライアントにはセキュリティ設定が適用されません。そのため、WCF クライアントの生成後に、WSE 3.0 サービスで必要なセキュリティ設定を指定する必要があります。
カスタム バインディングを使用してこれらのセキュリティ設定を適用することにより、WSE 3.0 サービスの要件、および WSE 3.0 サービスと WCF クライアントとの相互運用性の要件を考慮に入れることができます。これらの相互運用性要件には、前述の 2004 年 8 月版 WS-Addressing 仕様の使用と、WSE 3.0 の既定のメッセージ保護が SignBeforeEncrypt であることが含まれます。WCF の既定のメッセージ保護は、SignBeforeEncryptAndEncryptSignature です。このトピックでは、WSE 3.0 サービスと相互運用する WCF バインディングの作成方法について詳しく説明します。WCF には、このバインディングが組み込まれたサンプルも用意されています。このサンプル詳細については、 、「Interoperating with WSE」を参照してください。
WCF クライアントで WSE 3.0 サービスにアクセスするには
Service Metadata Utility Tool (SvcUtil.exe) を実行して、WSE 3.0 Web サービスの WCF クライアントを作成します。
WSE 3.0 Web サービスに対して、WCF クライアントが作成されます。WSE 3.0 は MEX プロトコルをサポートしていないため、このツールを使用して Web サービスのセキュリティ要件を取得することはできません。アプリケーション開発者は、クライアントのセキュリティ設定を追加する必要があります。
WCF クライアントの作成方法詳細については、 、「方法 : Windows Communication Foundation クライアントを作成する」を参照してください。
WSE 3.0 Web サービスと通信できるバインディングを表すクラスを作成します。
次のクラスは、Interoperating with WSE のサンプルの一部です。
- Binding クラスから派生するクラスを作成します。
Binding クラスから派生する、WseHttpBinding
という名前のクラスを作成する方法を次のコード例に示します。 - WSE サービスで使用する WSE 設定不要アサーション、派生キーが必要かどうか、セキュリティで保護されたセッションを使用するかどうか、署名の確認が必要かどうか、およびメッセージ保護設定を指定するプロパティを、このクラスに追加します。WSE 3.0 では、設定不要アサーションはクライアントまたは Web サービスのセキュリティ要件を指定します。これらのセキュリティ要件は、WCF のバインディングの認証モードに似ています。
WSE 設定不要アサーション、派生キーが必要かどうか、セキュリティで保護されたセッションを使用するかどうか、署名の確認が必要かどうか、およびメッセージ保護設定をそれぞれ指定する、SecurityAssertion
、RequireDerivedKeys
、EstablishSecurityContext
、およびMessageProtectionOrder
の各プロパティを定義するコード例を次に示します。 - CreateBindingElements メソッドをオーバーライドして、バインディング プロパティを設定します。
SecurityAssertion
プロパティとMessageProtectionOrder
プロパティの値を取得することで、トランスポート、メッセージ エンコーディング、メッセージ保護設定を指定するコード例を次に示します。
- Binding クラスから派生するクラスを作成します。
クライアントのアプリケーション コードでは、コードを追加してバインディングのプロパティを設定します。
WSE 3.0 AnonymousForCertificate の設定不要なセキュリティ アサーションで定義されているように、メッセージの保護と認証を使用しなければならない WCF クライアントを指定するコード例を次に示します。また、セキュリティで保護されたセッションと派生キーが必要です。
例
WSE 3.0 の設定不要のセキュリティ アサーションのプロパティに対応するプロパティを公開するカスタムのバインディングを定義するコード例を次に示します。この WseHttpBinding
という名前のカスタムのバインディングは、WSSecurityAnonymous WSE 3.0 QuickStart のサンプルと通信する WCF クライアントのバインディング プロパティの指定に使用されます。