SAML トークン プロバイダーSAML Token Provider

このサンプルでは、カスタム クライアントの SAML トークン プロバイダーを実装する方法を示します。This sample demonstrates how to implement a custom client SAML token provider. Windows Communication Foundation (WCF) のトークンプロバイダーは、セキュリティインフラストラクチャに資格情報を提供するために使用されます。A token provider in Windows Communication Foundation (WCF) is used for supplying credentials to the security infrastructure. 一般的に、トークン プロバイダーは、ターゲットをチェックし、適切な証明書を発行して、セキュリティ インフラストラクチャがメッセージのセキュリティを保護できるようにします。The token provider in general examines the target and issues appropriate credentials so that the security infrastructure can secure the message. WCF には、既定の資格情報マネージャートークンプロバイダーが付属しています。WCF ships with the default Credential Manager Token Provider. また、WCF には、CardSpace トークンプロバイダーも付属しています。WCF also ships with a CardSpace token provider. カスタム トークン プロバイダーは、次の場合に便利です。Custom token providers are useful in the following cases:

  • トークン プロバイダーが連携動作できない資格情報ストアがある場合。If you have a credential store that these token providers cannot operate with.

  • ユーザーが資格情報を使用するときに、ユーザーが詳細情報を提供した時点から資格情報を変換するための独自のカスタムメカニズムを提供する場合。If you want to provide your own custom mechanism for transforming the credentials from the point when the user provides the details to when the WCF client framework uses the credentials.

  • カスタム トークンを構築している場合。If you are building a custom token.

このサンプルでは、WCF クライアントフレームワークの外部から取得した SAML トークンを使用できるようにするカスタムトークンプロバイダーを構築する方法を示します。This sample shows how to build a custom token provider that allows a SAML token obtained from outside of the WCF client framework to be used.

このサンプルに示されている手順の概要は次のとおりです。To summarize, this sample demonstrates the following:

  • クライアントをカスタム トークン プロバイダーを使用して構成する手順。How a client can be configured with a custom token provider.

  • SAML トークンをカスタム クライアント資格情報に渡す手順。How a SAML token can be passed to the custom client credentials.

  • SAML トークンを WCF クライアントフレームワークに提供する方法。How the SAML token is provided to the WCF client framework.

  • サーバーがクライアントによってサーバーの X.509 証明書を使用して認証される手順。How the server is authenticated by the client using the server's X.509 certificate.

サービスは、構成ファイル App.config を使用して定義された、サービスと通信するための2つのエンドポイントを公開します。各エンドポイントは、アドレス、バインディング、およびコントラクトで構成されます。The service exposes two endpoints for communicating with the service, defined using the configuration file App.config. Each endpoint consists of an address, a binding, and a contract. バインディングの構成には、標準の wsFederationHttpBinding が使用されます。これはメッセージ セキュリティを使用します。The binding is configured with a standard wsFederationHttpBinding, which uses Message security. 1 つのエンドポイントは、クライアントが対称証明キーを使用する SAML トークンで認証を行うことを想定しています。これに対してもう 1 つのエンドポイントでは、クライアントが非対称証明キーを使用する SAML トークンで認証を行うことを想定しています。One endpoint expects the client to authenticate with a SAML token that uses a symmetric proof key while the other expects the client to authenticate with a SAML token that uses an asymmetric proof key. また、サービスは serviceCredentials 動作を使用してサービス証明書の構成も行います。The service also configures the service certificate using serviceCredentials behavior. serviceCredentials 動作を使用すると、サービス証明書を構成できます。The serviceCredentials behavior allows you to configure a service certificate. クライアントはサービス証明書を使用して、サービスを認証し、メッセージを保護します。A service certificate is used by a client to authenticate the service and provide message protection. 次の構成では、このトピックの最後のセットアップ手順で説明しているサンプル セットアップでインストールされる "localhost" 証明書を参照しています。The following configuration references the "localhost" certificate installed during the sample setup as described in the setup instructions at the end of this topic. serviceCredentials 動作を使用すると、SAML トークンに署名する信頼できる証明書を構成することもできます。The serviceCredentials behavior also allows you to configure certificates that are trusted to sign SAML tokens. 次の構成では、サンプルでインストールされる 'Alice' 証明書を参照しています。The following configuration references the 'Alice' certificate installed during the sample.

<system.serviceModel>
 <services>
  <service
          name="Microsoft.ServiceModel.Samples.CalculatorService"
          behaviorConfiguration="CalculatorServiceBehavior">
   <host>
    <baseAddresses>
     <!-- configure base address provided by host -->
     <add
  baseAddress="http://localhost:8000/servicemodelsamples/service/" />
    </baseAddresses>
   </host>
   <!-- use base address provided by host -->
   <!-- Endpoint that expect SAML tokens with Symmetric proof keys -->
   <endpoint address="calc/symm"
             binding="wsFederationHttpBinding"
             bindingConfiguration="Binding1"
             contract="Microsoft.ServiceModel.Samples.ICalculator" />
   <!-- Endpoint that expect SAML tokens with Asymmetric proof keys -->
   <endpoint address="calc/asymm"
             binding="wsFederationHttpBinding"
             bindingConfiguration="Binding2"
             contract="Microsoft.ServiceModel.Samples.ICalculator" />
  </service>
 </services>

 <bindings>
  <wsFederationHttpBinding>
   <!-- Binding that expect SAML tokens with Symmetric proof keys -->
   <binding name="Binding1">
    <security mode="Message">
     <message negotiateServiceCredential ="false"
              issuedKeyType="SymmetricKey"
              issuedTokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1"  />
    </security>
   </binding>
   <!-- Binding that expect SAML tokens with Asymmetric proof keys -->
   <binding name="Binding2">
    <security mode="Message">
     <message negotiateServiceCredential ="false"
              issuedKeyType="AsymmetricKey"
              issuedTokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1"  />
    </security>
   </binding>
  </wsFederationHttpBinding>
 </bindings>

 <behaviors>
  <serviceBehaviors>
   <behavior name="CalculatorServiceBehavior">
    <!--
    The serviceCredentials behavior allows one to define a service certificate.
    A service certificate is used by a client to authenticate the service and provide message protection.
    This configuration references the "localhost" certificate installed during the setup instructions.
    -->
    <serviceCredentials>
     <!-- Set allowUntrustedRsaIssuers to true to allow self-signed, asymmetric key based SAML tokens -->
     <issuedTokenAuthentication allowUntrustedRsaIssuers ="true" >
      <!-- Add Alice to the list of certs trusted to issue SAML tokens -->
      <knownCertificates>
       <add storeLocation="LocalMachine"
            storeName="TrustedPeople"
            x509FindType="FindBySubjectName"
            findValue="Alice"/>
      </knownCertificates>
     </issuedTokenAuthentication>
     <serviceCertificate storeLocation="LocalMachine"
                         storeName="My"
                         x509FindType="FindBySubjectName"
                         findValue="localhost"  />
    </serviceCredentials>
   </behavior>
  </serviceBehaviors>
 </behaviors>

</system.serviceModel>

次の手順は、カスタム SAML トークンプロバイダーを開発し、WCF: security framework と統合する方法を示しています。The following steps show how to develop a custom SAML token provider and integrate it with WCF: security framework:

  1. カスタムの SAML トークン プロバイダーを作成します。Write a custom SAML token provider.

    サンプルでは、構築時に提供される SAML アサーションに基づいてセキュリティ トークンを返す、カスタムの SAML トークン プロバイダーを実装します。The sample implements a custom SAML token provider that returns a security token based on a SAML assertion that is provided at construction time.

    このタスクを実行するため、カスタム トークン プロバイダーは SecurityTokenProvider クラスから派生し、GetTokenCore メソッドをオーバーライドします。To perform this task, the custom token provider is derived from the SecurityTokenProvider class and overrides the GetTokenCore method. このメソッドは、新しい SecurityToken を作成して返します。This method creates and returns a new SecurityToken.

    protected override SecurityToken GetTokenCore(TimeSpan timeout)
    {
     // Create a SamlSecurityToken from the provided assertion
     SamlSecurityToken samlToken = new SamlSecurityToken(assertion);
    
     // Create a SecurityTokenSerializer that will be used to
     // serialize the SamlSecurityToken
     WSSecurityTokenSerializer ser = new WSSecurityTokenSerializer();
     // Create a memory stream to write the serialized token into
     // Use an initial size of 64Kb
     MemoryStream s = new MemoryStream(UInt16.MaxValue);
    
     // Create an XmlWriter over the stream
     XmlWriter xw = XmlWriter.Create(s);
    
     // Write the SamlSecurityToken into the stream
     ser.WriteToken(xw, samlToken);
    
     // Seek back to the beginning of the stream
     s.Seek(0, SeekOrigin.Begin);
    
     // Load the serialized token into a DOM
     XmlDocument dom = new XmlDocument();
     dom.Load(s);
    
     // Create a KeyIdentifierClause for the SamlSecurityToken
     SamlAssertionKeyIdentifierClause samlKeyIdentifierClause = samlToken.CreateKeyIdentifierClause<SamlAssertionKeyIdentifierClause>();
    
    // Return a GenericXmlToken from the XML for the
    // SamlSecurityToken, the proof token, the valid from and valid
    // until times from the assertion and the key identifier clause
    // created above
    return new GenericXmlSecurityToken(dom.DocumentElement, proofToken, assertion.Conditions.NotBefore, assertion.Conditions.NotOnOrAfter, samlKeyIdentifierClause, samlKeyIdentifierClause, null);
    }
    
  2. カスタム セキュリティ トークン マネージャーを作成します。Write custom security token manager.

    SecurityTokenManager クラスは、SecurityTokenProvider メソッド内で渡される特定の SecurityTokenRequirementCreateSecurityTokenProvider の作成に使用されます。The SecurityTokenManager class is used to create SecurityTokenProvider for specific SecurityTokenRequirement that is passed to it in CreateSecurityTokenProvider method. セキュリティ トークン マネージャーは、トークン認証システムとトークン シリアライザーの作成にも使用されますが、このサンプルでは扱っていません。A security token manager is also used to create token authenticators and token serializer, but those are not covered by this sample. このサンプルでは、カスタム セキュリティ トークン マネージャーは ClientCredentialsSecurityTokenManager クラスを継承し、渡されたトークンの要件で SAML トークンが必要であることが示されている場合に、CreateSecurityTokenProvider メソッドをオーバーライドしてカスタムの SAML トークン プロバイダーを返します。In this sample the custom security token manager inherits from the ClientCredentialsSecurityTokenManager class and overrides the CreateSecurityTokenProvider method to return the custom SAML token provider when the passed token requirements indicate that the SAML token is requested. クライアント資格情報クラス (手順 3. を参照) がアサーションを指定していない場合、セキュリティ トークン マネージャーは適切なインスタンスを作成します。If the client credentials class (see step 3) has not specified an assertion, the security token manager creates an appropriate instance.

    public class SamlSecurityTokenManager : ClientCredentialsSecurityTokenManager
    {
     SamlClientCredentials samlClientCredentials;
    
     public SamlSecurityTokenManager ( SamlClientCredentials samlClientCredentials)
      : base(samlClientCredentials)
     {
      // Store the creating client credentials
      this.samlClientCredentials = samlClientCredentials;
     }
    
     public override SecurityTokenProvider CreateSecurityTokenProvider ( SecurityTokenRequirement tokenRequirement )
     {
      // If token requirement matches SAML token return the
      // custom SAML token provider
      if (tokenRequirement.TokenType == SecurityTokenTypes.Saml ||
          tokenRequirement.TokenType == "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1")
      {
       // Retrieve the SAML assertion and proof token from the
       // client credentials
       SamlAssertion assertion = this.samlClientCredentials.Assertion;
       SecurityToken prooftoken = this.samlClientCredentials.ProofToken;
    
       // If either the assertion of proof token is null...
       if (assertion == null || prooftoken == null)
       {
        // ...get the SecurityBindingElement and then the
        // specified algorithm suite
        SecurityBindingElement sbe = null;
        SecurityAlgorithmSuite sas = null;
    
        if ( tokenRequirement.TryGetProperty<SecurityBindingElement> ( "http://schemas.microsoft.com/ws/2006/05/servicemodel/securitytokenrequirement/SecurityBindingElement", out sbe))
        {
         sas = sbe.DefaultAlgorithmSuite;
        }
    
        // If the token requirement is for a SymmetricKey based token..
        if (tokenRequirement.KeyType == SecurityKeyType.SymmetricKey)
        {
         // Create a symmetric proof token
         prooftoken = SamlUtilities.CreateSymmetricProofToken ( tokenRequirement.KeySize );
         // and a corresponding assertion based on the claims specified in the client credentials
         assertion = SamlUtilities.CreateSymmetricKeyBasedAssertion ( this.samlClientCredentials.Claims, new X509SecurityToken ( samlClientCredentials.ClientCertificate.Certificate ), new X509SecurityToken ( samlClientCredentials.ServiceCertificate.DefaultCertificate ), (BinarySecretSecurityToken)prooftoken, sas);
        }
        // otherwise...
        else
        {
         // Create an asymmetric proof token
         prooftoken = SamlUtilities.CreateAsymmetricProofToken();
         // and a corresponding assertion based on the claims
         // specified in the client credentials
         assertion = SamlUtilities.CreateAsymmetricKeyBasedAssertion ( this.samlClientCredentials.Claims, prooftoken, sas );
        }
       }
    
       // Create a SamlSecurityTokenProvider based on the assertion and proof token
       return new SamlSecurityTokenProvider(assertion, prooftoken);
      }
      // otherwise use base implementation
      else
      {
       return base.CreateSecurityTokenProvider(tokenRequirement);
      }
    }
    
  3. カスタム クライアント資格情報を作成します。Write a custom client credential.

    クライアント資格情報クラスは、クライアント プロキシ用に構成された資格情報を表すために使用され、トークン認証システム、トークン プロバイダー、およびトークン シリアライザーの取得に使用されるセキュリティ トークン マネージャーを作成します。Client credentials class is used to represent the credentials that are configured for the client proxy and creates a security token manager that is used to obtain token authenticators, token providers and token serializer.

    public class SamlClientCredentials : ClientCredentials
    {
     ClaimSet claims;
     SamlAssertion assertion;
     SecurityToken proofToken;
    
     public SamlClientCredentials() : base()
     {
      // Set SupportInteractive to false to suppress Cardspace UI
      base.SupportInteractive = false;
     }
    
     protected SamlClientCredentials(SamlClientCredentials other) : base ( other )
     {
      // Just do reference copy given sample nature
      this.assertion = other.assertion;
      this.claims = other.claims;
      this.proofToken = other.proofToken;
     }
    
     public SamlAssertion Assertion { get { return assertion; } set { assertion = value; } }
    
     public SecurityToken ProofToken { get { return proofToken; } set { proofToken = value; } }
     public ClaimSet Claims { get { return claims; } set { claims = value; } }
    
     protected override ClientCredentials CloneCore()
     {
      return new SamlClientCredentials(this);
     }
    
     public override SecurityTokenManager CreateSecurityTokenManager()
     {
      // return custom security token manager
      return new SamlSecurityTokenManager(this);
     }
    }
    
  4. カスタム クライアント資格情報を使用するようクライアントを構成します。Configure the client to use the custom client credential.

    サンプルでは既定のクライアント資格情報を削除し、新しいクライアント資格情報クラスを提供して、クライアントがカスタム クライアント資格情報を使用できるようにします。The sample deletes the default client credential class and supplies the new client credential class so the client can use the custom client credential.

    // Create new credentials class
    SamlClientCredentials samlCC = new SamlClientCredentials();
    
    // Set the client certificate. This is the cert that will be used to sign the SAML token in the symmetric proof key case
    samlCC.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "Alice");
    
    // Set the service certificate. This is the cert that will be used to encrypt the proof key in the symmetric proof key case
    samlCC.ServiceCertificate.SetDefaultCertificate(StoreLocation.CurrentUser, StoreName.TrustedPeople, X509FindType.FindBySubjectName, "localhost");
    
    // Create some claims to put in the SAML assertion
    IList<Claim> claims = new List<Claim>();
    claims.Add(Claim.CreateNameClaim(samlCC.ClientCertificate.Certificate.Subject));
    ClaimSet claimset = new DefaultClaimSet(claims);
    samlCC.Claims = claimset;
    
    // set new credentials
    client.ChannelFactory.Endpoint.Behaviors.Remove(typeof(ClientCredentials));
    client.ChannelFactory.Endpoint.Behaviors.Add(samlCC);
    

サービスでは、呼び出し元に関連するクレームが表示されます。On the service, the claims associated with the caller are displayed. このサンプルを実行すると、操作要求および応答がクライアントのコンソール ウィンドウに表示されます。When you run the sample, the operation requests and responses are displayed in the client console window. クライアントをシャットダウンするには、クライアント ウィンドウで Enter キーを押します。Press ENTER in the client window to shut down the client.

セットアップ バッチ ファイルSetup Batch File

このサンプルに用意されている Setup.bat バッチ ファイルを使用すると、適切な証明書を使用してサーバーを構成し、サーバー証明書ベースのセキュリティを必要とする自己ホスト型アプリケーションを実行できるようになります。The Setup.bat batch file included with this sample allows you to configure the server with the relevant certificate to run a self-hosted application that requires server certificate-based security. このバッチ ファイルは、複数のコンピューターを使用する場合またはホストなしの場合に応じて変更する必要があります。This batch file must be modified to work across computers or to work in a non-hosted case.

次に、バッチ ファイルのセクションのうち、該当する構成で実行するために変更が必要となる部分を示します。The following provides a brief overview of the different sections of the batch files so that they can be modified to run in the appropriate configuration.

  • サーバー証明書の作成 :Creating the server certificate:

    Setup.bat バッチ ファイルの次の行は、使用するサーバー証明書を作成します。The following lines from the Setup.bat batch file create the server certificate to be used. %SERVER_NAME% 変数はサーバー名です。The %SERVER_NAME% variable specifies the server name. この変数を変更して、使用するサーバー名を指定します。Change this variable to specify your own server name. このバッチ ファイルでの既定値は localhost です。The default value in this batch file is localhost.

    証明書は、LocalMachine ストアの場所の My (Personal) ストアに保存されます。The certificate is stored in My (Personal) store under the LocalMachine store location.

    echo ************
    echo Server cert setup starting
    echo %SERVER_NAME%
    echo ************
    echo making server cert
    echo ************
    makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=%SERVER_NAME% -sky exchange -pe
    
  • クライアントの信頼された証明書ストアへのサーバー証明書のインストール。Installing the server certificate into the client's trusted certificate store:

    Setup.bat バッチ ファイルの次の行は、サーバー証明書をクライアントの信頼されたユーザーのストアにコピーします。The following lines in the Setup.bat batch file copy the server certificate into the client trusted people store. この手順が必要なのは、Makecert.exe によって生成される証明書がクライアント システムにより暗黙には信頼されないからです。This step is required because certificates generated by Makecert.exe are not implicitly trusted by the client system. マイクロソフト発行の証明書など、クライアントの信頼されたルート証明書に基づいた証明書が既にある場合は、クライアント証明書ストアにサーバー証明書を配置するこの手順は不要です。If you already have a certificate that is rooted in a client trusted root certificate—for example, a Microsoft-issued certificate—this step of populating the client certificate store with the server certificate is not required.

    certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r LocalMachine -s TrustedPeople
    
  • 発行元の証明書の作成Creating the issuer certificate.

    Setup.bat バッチ ファイルの次の行は、使用する発行元の証明書を作成します。The following lines from the Setup.bat batch file create the issuer certificate to be used. %USER_NAME% 変数は発行元の名前です。The %USER_NAME% variable specifies the issuer name. この変数を変更して、使用する発行元の名前を指定します。Change this variable to specify your own issuer name. このバッチ ファイルでの既定値は Alice です。The default value in this batch file is Alice.

    証明書は、CurrentUser 保存場所の My ストアに保存されます。The certificate is stored in My store under the CurrentUser store location.

    echo ************
    echo Server cert setup starting
    echo %SERVER_NAME%
    echo ************
    echo making server cert
    echo ************
    makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=%USER_NAME% -sky exchange -pe
    
  • サーバーの信頼された証明書ストアへの発行元証明書のインストールInstalling the issuer certificate into the server's trusted certificate store.

    Setup.bat バッチ ファイルの次の行は、サーバー証明書をクライアントの信頼されたユーザーのストアにコピーします。The following lines in the Setup.bat batch file copy the server certificate into the client trusted people store. この手順が必要なのは、Makecert.exe によって生成される証明書がクライアント システムにより暗黙には信頼されないからです。This step is required because certificates generated by Makecert.exe are not implicitly trusted by the client system. マイクロソフト発行の証明書など、クライアントの信頼されたルート証明書に基づいた証明書が既にある場合は、サーバー証明書ストアに発行元証明書を配置するこの手順は不要です。If you already have a certificate that is rooted in a client trusted root certificate—for example, a Microsoft-issued certificate—this step of populating the server certificate store with the issuer certificate is not required.

    certmgr.exe -add -r CurrentUser -s My -c -n %USER_NAME% -r LocalMachine -s TrustedPeople
    

サンプルをセットアップしてビルドするにはTo set up and build the sample

  1. Windows Communication Foundation サンプルの1回限りのセットアップ手順を実行したことを確認します。Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. ソリューションをビルドするには、「 Windows Communication Foundation サンプルのビルド」の手順に従います。To build the solution, follow the instructions in Building the Windows Communication Foundation Samples.

注意

Svcutil.exe を使用してこのサンプルの構成を再生成した場合は、クライアント コードに一致するように、クライアント構成内のエンドポイント名を変更してください。If you use Svcutil.exe to regenerate the configuration for this sample, be sure to modify the endpoint name in the client configuration to match the client code.

サンプルを同じコンピューターで実行するにはTo run the sample on the same computer

  1. 管理者特権で実行する Visual Studio 2012 コマンドプロンプト内のサンプルのインストールフォルダーから Setup.bat を実行します。Run Setup.bat from the sample installation folder inside a Visual Studio 2012 command prompt run with administrator privileges. これにより、サンプルの実行に必要なすべての証明書がインストールされます。This installs all the certificates required for running the sample.

    注意

    Setup.bat バッチファイルは、Visual Studio 2012 のコマンドプロンプトから実行するように設計されています。The Setup.bat batch file is designed to be run from a Visual Studio 2012 Command Prompt. Visual Studio 2012 のコマンドプロンプト内で設定された PATH 環境変数は、Setup.bat スクリプトで必要な実行可能ファイルを含むディレクトリを指します。The PATH environment variable set within the Visual Studio 2012 Command Prompt points to the directory that contains executables required by the Setup.bat script.

  2. Service.exe を service\bin で起動します。Launch Service.exe from service\bin.

  3. Client.exe を \client\bin で起動します。Launch Client.exe from \client\bin. クライアント アクティビティがクライアントのコンソール アプリケーションに表示されます。Client activity is displayed on the client console application.

  4. クライアントとサービスが通信できない場合は、「 WCF サンプルのトラブルシューティングのヒント」を参照してください。If the client and service are not able to communicate, see Troubleshooting Tips for WCF Samples.

サンプルを複数のコンピューターで実行するにはTo run the sample across computers

  1. サービス コンピューターにサービス バイナリ用のディレクトリを作成します。Create a directory on the service computer for the service binaries.

  2. サービス プログラム ファイルを、サービス コンピューターのサービス ディレクトリにコピーします。Copy the service program files to the service directory on the service computer. Setup.bat ファイルと Cleanup.bat ファイルもサービス コンピューターにコピーします。Also copy the Setup.bat and Cleanup.bat files to the service computer.

  3. コンピューターの完全修飾ドメイン名を含むサブジェクト名を持つサーバー証明書が必要です。You must have a server certificate with the subject name that contains the fully-qualified domain name of the computer. 新しい証明書名を反映するには、Service.exe.config ファイルを更新する必要があります。The Service.exe.config file must be updated to reflect this new certificate name. サーバー証明書を作成するには、Setup.bat バッチ ファイルを変更します。You can create server certificate by modifying the Setup.bat batch file. setup.bat ファイルは、管理者特権で開いた Visual Studio ウィンドウの開発者コマンドプロンプトで実行する必要があることに注意してください。Note that the setup.bat file must be run in a Developer Command Prompt for Visual Studio window opened with administrator privileges. %SERVER_NAME% 変数には、サービスをホストするコンピューターの完全修飾ホスト名を設定する必要があります。You must set the %SERVER_NAME% variable to the fully-qualified host name of the computer that is used to host the service.

  4. サーバー証明書をクライアントの CurrentUser-TrustedPeople ストアにコピーします。Copy the server certificate into the CurrentUser-TrustedPeople store of the client. この手順は、サーバー証明書の発行元をクライアントが信頼できる場合は不要です。This step is not necessary when the server certificate is issued by a client trusted issuer.

  5. サービス コンピューターの Service.exe.config ファイルで、ベース アドレスの値を localhost から完全修飾コンピューター名に変更します。In the Service.exe.config file on the service computer, change the value of the base address to specify a fully-qualified computer name instead of localhost.

  6. サービス コンピューターで、コマンド プロンプトから Service.exe を実行します。On the service computer, run Service.exe from a command prompt.

  7. クライアント プログラム ファイルを、言語固有のフォルダーにある \client\bin\ フォルダーからクライアント コンピューターにコピーします。Copy the client program files from the \client\bin\ folder, under the language-specific folder, to the client computer.

  8. クライアント コンピューターの Client.exe.config ファイルで、エンドポイントのアドレス値をサービスの新しいアドレスに合わせます。In the Client.exe.config file on the client computer, change the address value of the endpoint to match the new address of your service.

  9. クライアント コンピューターで、コマンド プロンプト ウィンドウから Client.exe を起動します。On the client computer, launch Client.exe from a command prompt window.

  10. クライアントとサービスが通信できない場合は、「 WCF サンプルのトラブルシューティングのヒント」を参照してください。If the client and service are not able to communicate, see Troubleshooting Tips for WCF Samples.

サンプルの実行後にクリーンアップするにはTo clean up after the sample

  1. サンプルの実行が終わったら、サンプル フォルダーにある Cleanup.bat を実行します。Run Cleanup.bat in the samples folder once you have finished running the sample.