WSE との相互運用性

Download sample

このサンプルでは、Web Service Enhancements (WSE) 3.0 のサービスと Windows Communication Foundation (WCF) のクライアントまたはサービスとの間の相互運用を実現する方法を示します。

このサンプルでは、WseHttpBinding というカスタム バインディングを実装します。このバインディングが存在することで、WSE 3.0 のポリシー ファイルを使用して WCF のクライアントまたはサービスを構成することが可能になり、WSE 3.0 との相互運用が実現します。そのために、WseHttpBinding では、ポリシー ファイル内の WSE 3.0 プロパティを WCF のバインディング内のプロパティにマッピングします。この WseHttpBinding は、標準的なバインディングと同様のものと見なすことができます。このバインディングは、スタック内の他のバインディング (特に SecurityBindingElement) のプロパティの一部だけを参照可能にするビューとなるからです。

このサンプルは、2 つの部分から構成されます。最初の部分では、WseHttpBinding を使用して WCF のクライアントから WCF の自己ホスト型サービスへの呼び出しを行う方法を示します。次の部分では、WSE 3.0 SDK をインストールする必要があります。

WCF のクライアントとサービスの間での WseHttpBinding の使用

クライアント側では、CallWcfService メソッドを使用して WseHttpBinding のインスタンスを作成し、クライアントのセキュリティ要件に応じたプロパティを設定します。

static void Main(string[] args)
{
    CallWcfService();
    ...
}

この要件は、次のコードに示すように、サービスの Main 関数内で設定される値に一致する必要があります。

//Create a ServiceHost for the CalculatorService type.
using (ServiceHost serviceHost =        new ServiceHost(typeof(CalculatorService)))
{
    //Create and configure the WseHttpBinding.
    WseHttpBinding binding = new WseHttpBinding();
    binding.SecurityAssertion =        WseSecurityAssertion.AnonymousForCertificate;
    binding.EstablishSecurityContext = true;
    binding.RequireDerivedKeys = true;
    binding.MessageProtectionOrder =        MessageProtectionOrder.SignBeforeEncrypt;

    serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, "");
    ServiceCredentials creds = new ServiceCredentials();
    creds.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine,
                                            StoreName.My,                                            X509FindType.FindBySubjectName,                                             "localhost");
    serviceHost.Description.Behaviors.Add(creds);
    serviceHost.Open();
    ...
}

サンプルをセットアップ、ビルド、および実行するには

  1. Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。

  2. C# ソリューションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  3. 単一コンピュータ構成でサンプルを実行するには、「Windows Communication Foundation サンプルの実行」の手順に従います。

  4. このサンプルのサービスは自己ホスト型です。したがって、クライアントを実行する前に、/service/bin ディレクトリの Service.exe ファイルが実行済みであることを確認してください。

WseHttpBinding を使用した WSE 3.0 サービスとの通信

このプロジェクトのクライアントは、WSE 3.0 SDK QuickStart のサンプルとの通信にも使用できます。

WSE 3.0 SDK がインストールされていれば、WSE 3.0 のサービスのビルド後に、そのサービスと通信するクライアントを Svcutil.exe ツールを使用して生成することができます。WSE 3.0 サービスがローカル コンピュータで実行されている状態でこのことを行う方法を、次の例に示します。

svcutil.exe /out:wseproxy.cs /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" https://localhost/WSSecurityAnonymousPolicy/WSSecurityAnonymousService.asmx

Wseproxy.cs ファイルは、このプロジェクトに含まれています。生成されたプロキシ クラスの名前は WSSecurityAnonymousServiceSoapProxy で、WseHttpBinding と一緒に提供されます。このバインディングは、コード内でプロパティを使用して構成されたものか、Wse3PolicyCache.config 構成ファイルから読み込まれた WSE 3.0 ポリシー ファイルを使用して構成されたものです。Wse3PolicyCache.config 構成ファイルも、このプロジェクトに含まれています。

WSE 3.0 WSSecurityAnonymous サンプルが正常にビルドされた後で、クライアントを実行すると、セキュリティで保護された状態で株価情報が WSE 3.0 サービスから返されます。

WSE 3.0 のセットアップ手順については、このトピックの最後に説明します。

クライアント側では、CallWcfService への呼び出しをコメント化し、CallWseService を呼び出すコードのコメントを解除します。truefalse のどちらを渡すかによって、ポリシー ファイルを WseHttpBinding の構成に使用するかどうかが決まります。使用する場合は LoadPolicy(String filename, String policyName) メソッドが呼び出され、このメソッドの中で XmlReader を使用して WSE 3.0 ポリシー ファイルが解析されます。

Noteメモ :

WSE 3.0 がクライアントにインストール済みの場合は、XmlReader を使用してポリシー ファイルを読み込む代わりに、コードを変更して、WSE 3.0 の Microsoft.Web.Services3.Design.Policies クラスを使用してポリシーを読み込むことができます。これを行う利点は、Microsoft.Web.Services3.Design.Policies クラスはすべての有効な形式の WSE 3.0 ポリシー ファイルの解析が可能で、その結果を WseHttpBinding に渡せることです。コードで XmlReader 型を使用する場合は、解析できるポリシー ファイルの形式が限定されます。

WSE 3.0 を使用してサンプルをセットアップ、ビルド、および実行するには

  1. WSE 3.0 製品を「WSE (Web サービス拡張) 3.0 for Microsoft .NET」からダウンロードしてインストールします。

  2. WSE 3.0 Quickstart サンプル ガイドを読み、WSE サンプルの構成およびセットアップの方法を確認します。これは、正しい X.509 証明書をインストールすることと、Web サービスをインターネット インフォメーション サービス (IIS) でホストするための仮想ディレクトリを作成するために必要です。具体的には、既定のインストール ディレクトリ C:\Program Files\Microsoft WSE\v3.0\Samples の Setup.bat ファイルを実行します。

  3. WSE 3.0 Quickstart のポリシー サンプル WSSecurityAnonymous をビルドします。このサンプルは、既定の設定では次のディレクトリにインストールされます (メモ : WSSecurityAnonymous にはコードのみのバージョンもあり、代わりにこのバージョンを使用しても機能します。このコードのみのバージョンを使用する場合は、クライアントでサービスの URL を https://localhost/WSSecurityAnonymousCode/WSSecurityAnonymousService.asmx に変更する必要があります)。

  4. この WSE 3.0 プロジェクトは、C:\Program Files\Microsoft WSE\v3.0\Samples\CS\QuickStart\Security\WSSecurityAnonymous\Policy にあります。

  5. この相互運用サンプルの WCF クライアントは、この WSE 3.0 Quickstart サンプルと相互運用できるように設計されています。

  6. Client.cs ファイルの Main 関数の中の、CallWseService メソッドへの呼び出しのコメントを解除します。さらに、CallWcfService への呼び出しをコメント化して、WCF のサービスを呼び出さないようにしてもかまいません。

  7. C# ソリューションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  8. 単一コンピュータ構成でサンプルを実行するには、「Windows Communication Foundation サンプルの実行」の手順に従います。

WSE 3.0 を使用して複数コンピュータでサンプルを設定、ビルド、および実行するには

  1. 最初に WSE 3.0 サービスをセットアップします。WSE 3.0 製品を「WSE (Web サービス拡張) 3.0 for Microsoft .NET」からダウンロードしてリモート コンピュータにインストールします。

  2. WSE 3.0 Quickstart サンプル ガイドを読み、WSE サンプルの構成およびセットアップの方法を確認します。これは、正しい X.509 証明書をインストールすることと、Web サービスをインターネット インフォメーション サービス (IIS) でホストするための仮想ディレクトリを作成するために必要です。具体的には、既定のインストール ディレクトリ C:\Program Files\Microsoft WSE\v3.0\Samples の Setup.bat ファイルを実行します。

  3. WSE 3.0 Quickstart のポリシー サンプル WSSecurityAnonymous をビルドします。このサンプルは、既定で次のディレクトリにインストールされます。

    Noteメモ :

    WSSecurityAnonymous にはコードのみのバージョンもあり、代わりにこのバージョンを使用しても機能します

  4. これは、WSE 3.0 プロジェクト、C:\Program Files\Microsoft WSE\v3.0\Samples\CS\QuickStart\Security\WSSecurityAnonymous\Policy です。

  5. サーバーをセットアップした後で、別のコンピュータでの WCF クライアントのセットアップは行いません。MMC ツールを使用して、WSE2QuickStartServer 証明書をファイルにエクスポートします。この証明書は、WSE 3.0 をインストールした LocalMachine/Personal 証明書ストアにあります。エクスポートするには、コンテキスト メニューの [すべてのタスク][エクスポート] オプションを使用します。秘密キーをエクスポートする必要はありません。.CER ファイルの作成に必要なのは公開キーだけです。MMC 証明書管理スナップインを使用して証明書ストア内の証明書を表示する方法の詳細については、C:\Program Files\Microsoft WSE\v3.0\Samples ディレクトリにある WSE 3.0 の readme.htm ファイルを参照してください。

  6. サーバー コンピュータの .CER ファイルをクライアント コンピュータにコピーし、公開証明書を CurrentUser/Trusted People 証明書ストアにインポートします。MMC 証明書管理スナップインの使用方法の詳細については、C:\Program Files\Microsoft WSE\v3.0\Samples ディレクトリにある WSE 3.0 の readme.htm ファイルを参照してください

    Noteメモ :

    WSE 3.0 setup.bat ファイルを実行すると、WSE2QuickStartServer サーバー証明書が、ある証明書ストアから別の証明書ストアにコピーされます)。

  7. サンプルを複数コンピュータ構成で実行するには、「Windows Communication Foundation サンプルの実行」の WCF クライアントに関する部分の手順に従い、localhost の代わりに WSE 3.0 サービスのアドレスを使用するようにクライアントを構成します。たとえば、"mymachine" という名前のコンピュータのアドレスは、既定では http://mymachine/WSSecurityAnonymousPolicy/WSSecurityAnonymousService.asmx です。

  8. Client.cs ファイルの Main 関数の中の CallWseService メソッドへの呼び出しのコメントを解除します。さらに、CallWcfService への呼び出しをコメント化して、WCF のサービスを呼び出さないようにしてもかまいません。

  9. C# ソリューションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  10. クライアントを実行します。

サンプルの実行後、クリーンアップするには

  • クライアントまたはサーバーから証明書を削除するには、MMC ツールを使用します。または、サーバーで、C:\Program Files\Microsoft WSE\v3.0\Samples ディレクトリの Cleanup.bat ファイルを実行します。

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.