WSE 3.0 Web サービスの WCF への移行
WSE 3.0 Web サービスを Windows Communication Foundation (WCF) に移行する利点には、パフォーマンスの向上と、追加のトランスポート、追加のセキュリティ シナリオ、および WS-* 仕様のサポートなどがあります。WSE 3.0 から WCF に移行した Web サービスでは、パフォーマンスが最大 200% から 400% 向上する可能性があります。WCF でサポートされているトランスポートの詳細については、「トランスポートの選択」を参照してください。WCF でサポートされているシナリオの一覧については、「一般的なセキュリティ シナリオ」を参照してください。WCF でサポートされている仕様の一覧については、「Web サービス プロトコルの相互運用性ガイド」を参照してください。
以下の各セクションでは、WSE 3.0 Web サービスの特定の機能を WCF に移行する方法についてのガイドラインを示します。
概要
WSE 3.0 アプリケーションと WCF アプリケーションには、ネットワーク レベルの相互運用性と、共通の用語セットが含まれます。WSE 3.0 アプリケーションと WCF アプリケーションは、両方がサポートする WS-* 仕様セットに基づき、ネットワーク レベルで相互運用できます。WSE 3.0 アプリケーションや WCF アプリケーションの展開時には、WSE の設定不要なセキュリティ アサーションの名前や認証モードなど、共通の用語セットが使用されます。
WCF と ASP.NET または WSE 3.0 のプログラミング モデルの間には、類似した側面が数多くありますが、同一ではありません。WCF プログラミング モデルの詳細については、「基本的なプログラミング ライフサイクル」を参照してください。
注 : |
---|
WSE Web サービスを WCF に移行する場合、ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) ツールを使用してクライアントを生成できます。ただし、このクライアントには、WCF サービスの開始点として使用できるインターフェイスとクラスも含まれます。生成されるインターフェイスの OperationContractAttribute 属性は、ReplyAction プロパティが * に設定されたコントラクトのメンバーに適用されます。WSE クライアントがこの設定を使用して Web サービスを呼び出すと、"Web.Services3.ResponseProcessingException: WSE910: An error happened during the processing of a response message, and you can find the error in the inner exception" という例外がスローされます。このエラーを軽減するには、OperationContractAttribute 属性の ReplyAction プロパティを null 以外の値 (http://Microsoft.WCF.Documentation/ResponseToOCAMethod など) に設定します。
|
セキュリティ
ポリシー ファイルを使用してセキュリティ保護される WSE 3.0 Web サービス
WCF サービスは、構成ファイルを使用してサービスをセキュリティで保護できます。この機構は、WSE 3.0 ポリシー ファイルと似ています。WSE 3.0 でポリシー ファイルを使用して Web サービスをセキュリティ保護するときは、設定不要のセキュリティ アサーションまたはカスタム ポリシー アサーションを使用します。設定不要のセキュリティ アサーションは、WCF セキュリティ バインド要素の認証モードに厳密にマップされます。WCF 認証モードと WSE 3.0 の設定不要のセキュリティ アサーションには、同一または類似の名前が付けられているだけでなく、これらは同じ資格情報の種類を使用してメッセージをセキュリティ保護します。たとえば、WSE 3.0 の設定不要の usernameForCertificate セキュリティ アサーションは、WCF の UsernameForCertificate 認証モードにマップされます。WSE 3.0 の設定不要の usernameForCertificate セキュリティ アサーションを使用する最小ポリシーが、カスタム バインディングの WCF の UsernameForCertificate 認証モードにどのようにマップされるかを次のコード例に示します。
WSE 3.0
<policies>
<policy name="MyPolicy">
<usernameForCertificate messageProtectionOrder="SignBeforeEncrypt"
requireDeriveKeys="true"/>
</policy>
</policies>
WCF
<customBinding>
<binding name="MyBinding">
<security authenticationMode="UserNameForCertificate"
messageProtectionOrder="SignBeforeEncrypt"
requireDerivedKeys="true"/>
</binding>
</customBinding>
ポリシー ファイルで指定されている WSE 3.0 Web サービスのセキュリティ設定を WCF に移行するには、構成ファイルでカスタム バインディングを作成し、設定不要のセキュリティ アサーションを同等の認証モードに設定する必要があります。さらに、WSE 3.0 クライアントがサービスと通信するときに 2004 年 8 月版の WS-Addressing 仕様を使用するように、カスタム バインディングを構成する必要もあります。移行後の WCF サービスが WSE 3.0 クライアントと通信する必要がなく、等価のセキュリティの保持のみが必要な場合は、カスタム バインディングを作成する代わりに WCF システム定義のバインディングと適切なセキュリティ設定を使用することを考慮してください。
WSE 3.0 ポリシー ファイルと WCF の同等のカスタム バインディングとの対応関係を次の表に示します。
WSE 3.0 の設定不要のセキュリティ アサーション | WCF のカスタム バインディング構成 |
---|---|
<usernameOverTransportSecurity /> |
|
<mutualCertificate10Security /> |
|
<usernameForCertificateSecurity /> |
|
<anonymousForCertificateSecurity /> |
|
<kerberosSecurity /> |
|
<mutualCertificate11Security /> |
|
WCF でカスタム バインディングを作成する方法の詳細については、「カスタム バインディング」を参照してください。
アプリケーション コードを使用してセキュリティ保護される WSE 3.0 Web サービス
WSE 3.0 と WCF のいずれを使用する場合でも、構成ではなくアプリケーション コードでセキュリティ要件を指定できます。WSE 3.0 でこれを行うには、Policy クラスの派生クラスを作成してから、Add メソッドを呼び出して要件を追加します。セキュリティ要件をコードで指定する方法の詳細については、「方法 : ポリシー ファイルを使用せずに Web サービスをセキュリティで保護する」を参照してください。WCF でセキュリティ要件をコードで指定するには、BindingElementCollection クラスのインスタンスを作成し、SecurityBindingElement のインスタンスを BindingElementCollection に追加します。セキュリティ アサーション要件は、SecurityBindingElement クラスの静的認証モード ヘルパー メソッドを使用して設定します。WCF を使用して、コードでセキュリティ要件を指定する方法の詳細については、「方法 : SecurityBindingElement を使用してカスタム バインディングを作成する」および「方法 : 指定した認証モード用の SecurityBindingElement を作成する」を参照してください。
WSE 3.0 カスタム ポリシー アサーション
WSE 3.0 には、2 種類のカスタム ポリシー アサーションがあります。一方は SOAP メッセージをセキュリティで保護し、もう一方は SOAP メッセージをセキュリティで保護しません。SOAP メッセージをセキュリティで保護するポリシー アサーションは WSE 3.0 の SecurityPolicyAssertion クラスから派生します。WCF でこれと概念的に等価なものは SecurityBindingElement クラスです。
注意すべき重要な点は、WSE 3.0 の設定不要のセキュリティ アサーションは WCF 認証モードのサブセットであるということです。WSE 3.0 でカスタム ポリシー アサーションを既に作成している場合は、同等の WCF 認証モードが存在する可能性があります。たとえば、WSE 3.0 は、設定不要の UsernameOverTransport セキュリティ アサーションと等価な CertificateOverTransport セキュリティ アサーションを提供しませんが、クライアントを認証するために X.509 証明書を使用します。このシナリオのために独自のカスタム ポリシー アサーションを定義している場合、WCF では簡単に移行できます。WCF では、このシナリオに対応する認証モードが定義されているため、静的な認証モード ヘルパー メソッドを利用して WCF の SecurityBindingElement を構成できます。
SOAP メッセージをセキュリティで保護するカスタム ポリシー アサーションと等価な WCF 認証モードが存在しない場合は、TransportSecurityBindingElement、SymmetricSecurityBindingElement、AsymmetricSecurityBindingElement WCF のいずれかのクラスからクラスを派生し、等価なバインド要素を指定します。詳細については、「方法 : SecurityBindingElement を使用してカスタム バインディングを作成する」を参照してください。
SOAP メッセージをセキュリティで保護しないカスタム ポリシー アサーションを変換する場合は、「フィルター処理」および「カスタム メッセージ インターセプター」のサンプルを参照してください。
WSE 3.0 カスタム セキュリティ トークン
カスタム トークンを作成するための WCF プログラミング モデルは、WSE 3.0 と異なります。WSE でカスタム トークンを作成する方法の詳細については、「カスタム セキュリティ トークンの作成」を参照してください。WCF でカスタム トークンを作成する方法の詳細については、「方法 : カスタム トークンを作成する」を参照してください。
WSE 3.0 カスタム トークン マネージャー
カスタム トークン マネージャーを作成するためのプログラミング モデルは、WCF と WSE 3.0 で異なります。カスタム トークン マネージャーと、カスタム セキュリティ トークンに必要なその他のコンポーネントを作成する方法の詳細については、「方法 : カスタム トークンを作成する」を参照してください。
注 : |
---|
カスタムの UsernameToken セキュリティ トークン マネージャーを既に作成している場合、WCF では、カスタム セキュリティ マネージャーを作成するよりも簡単に認証ロジックを指定する機構が提供されています。詳細については、「方法 : カスタム ユーザー名およびパスワード検証を使用する」を参照してください。 |
MTOM エンコードされた SOAP メッセージを使用する WSE 3.0 Web サービス
WSE 3.0 アプリケーションと同様に、WCF アプリケーションでは、MTOM メッセージ エンコードを構成で指定できます。この設定を移行するには、mtomMessageEncoding elementをサービスのバインディングに追加します。WSE 3.0 での MTOM エンコードの指定方法と、WCF での等価な MTOM エンコードの指定方法を、次のコード例に示します。
WSE 3.0
<messaging>
<mtom clientMode="On"/>
</messaging>
WCF
<customBinding>
<binding name="MyBinding">
<mtomMessageEncoding/>
</binding>
</customBinding>
メッセージング
WSE メッセージング API を使用する WSE 3.0 アプリケーション
クライアントと Web サービス間でやり取りされる XML に直接アクセスするために WSE メッセージング API が使用されている場合は、"Plain Old XML" (POX) を使用するようにアプリケーションを変換できます。POX の詳細については、「POX アプリケーションとの相互運用性」を参照してください。WSE メッセージング API の詳細については、「WSE メッセージング API を使用した SOAP メッセージの送受信」を参照してください。
トランスポート
TCP
既定では、TCP トランスポートを使用して SOAP メッセージを送信する WSE 3.0 クライアントおよび Web サービスは、WCF のクライアントおよび Web サービスと相互運用できません。このような非互換性は、TCP プロトコルで使用されるフレームの違いとパフォーマンス上の理由に起因します。ただし、WCF のサンプルでは、WSE 3.0 と相互運用するカスタム TCP セッションの実装方法を詳しく示しています。このサンプルの詳細については、「Transport: WSE 3.0 TCP Interoperability」を参照してください。
WCF アプリケーションで TCP トランスポートを使用するように指定するには、netTcpBinding Elementを使用します。
カスタム トランスポート
WCF において WSE 3.0 カスタム トランスポートに相当するのは、チャネル拡張です。チャネル拡張の作成方法の詳細については、「チャネル レイヤーの拡張」を参照してください。
参照
処理手順
方法 : 指定した認証モード用の SecurityBindingElement を作成する
概念
基本的なプログラミング ライフサイクル
カスタム バインディング
方法 : SecurityBindingElement を使用してカスタム バインディングを作成する