クライアント構成

Windows Communication Foundation (WCF) クライアント構成を使用して、クライアント エンドポイントのアドレス (Address)、バインディング (Binding)、動作 (Behavior)、およびコントラクト (Contract) (頭文字を取って "ABC" プロパティと呼ばれます) を指定できます。これらは、クライアントがサービス エンドポイントに接続するために使用されます。 <client> 要素には <endpoint> 要素があり、その属性はエンドポイント ABC を構成するために使用されます。 これらの属性については、「エンドポイントの構成」セクションで説明します。

<endpoint> 要素には、メタデータのインポートとエクスポートの設定を指定するために使用される <metadata> 要素、カスタム アドレス ヘッダーのコレクションを格納する <headers> 要素、メッセージを交換する他のエンドポイントによるエンドポイントの認証を可能にする <identity> 要素も含まれます。 <headers> 要素と <identity> 要素は EndpointAddress の一部であるため、これらについてはアドレスに関する記事で説明しています。 メタデータ拡張の使用法を説明しているトピックへのリンクは、「メタデータの構成」セクションにあります。

エンドポイントの構成

クライアント構成は、クライアントが 1 つ以上のエンドポイントを指定できるように設計します。各エンドポイントは、独自の名前、アドレス、コントラクトを持ち、そのエンドポイントを構成するために使用される、クライアント構成の <bindings> 要素と <behaviors> 要素を参照します。 クライアント構成ファイルには、"App.config" という名前を付ける必要があります。これは、WCF ランタイムが想定している名前です。 クライアント構成ファイルの例を次に示します。

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <system.serviceModel>  
        <client>  
          <endpoint  
            name="endpoint1"  
            address="http://localhost/ServiceModelSamples/service.svc"  
            binding="wsHttpBinding"  
            bindingConfiguration="WSHttpBinding_IHello"  
            behaviorConfiguration="IHello_Behavior"  
            contract="IHello" >  
  
            <metadata>  
              <wsdlImporters>  
                <extension  
                  type="Microsoft.ServiceModel.Samples.WsdlDocumentationImporter, WsdlDocumentation"/>  
              </wsdlImporters>  
            </metadata>  
  
            <identity>  
              <servicePrincipalName value="host/localhost" />  
            </identity>  
          </endpoint>  
            <!-- Add another endpoint by adding another <endpoint> element. -->
          <endpoint  
            name="endpoint2">  
           //Configure another endpoint here.  
          </endpoint>  
        </client>  
  
<!-- The bindings section references by the bindingConfiguration endpoint attribute.   -->
    <bindings>  
      <wsHttpBinding>  
        <binding name="WSHttpBinding_IHello"
                 bypassProxyOnLocal="false"
                 hostNameComparisonMode="StrongWildcard">  
          <readerQuotas maxDepth="32"/>  
          <reliableSession ordered="true"
                           enabled="false" />  
          <security mode="Message">  
           <!-- Security settings go here.   -->
          </security>  
        </binding>  
        <binding name="Another Binding"  
          <!-- Configure this binding here. -->  
        </binding>  
          </wsHttpBinding>  
     </bindings>  
  
<!-- The behavior section references by the behaviorConfiguration endpoint attribute.   -->
        <behaviors>  
            <endpointBehaviors>  
                <behavior name=" IHello_Behavior ">  
                    <clientVia />  
                </behavior>  
            </endpointBehaviors>  
        </behaviors>  
  
    </system.serviceModel>  
</configuration>  

省略可能な name 属性は、特定のコントラクトのエンドポイントを一意に識別します。 この属性は、サービスへのチャネルの作成時に、クライアント構成のどのエンドポイントをターゲットとし、読み込む必要があるかを指定するために、ChannelFactory<TChannel> または ClientBase<TChannel> が使用します。 エンドポイント構成名としてワイルドカード "*" を使用できます。これは、使用できるエンドポイント構成が 1 つだけ存在する場合はファイル内のエンドポイント構成を読み込み、それ以外の場合は例外をスローするように ApplyConfiguration メソッドに指示します。 この属性が省略されている場合、指定されたコントラクトの種類に関連する既定のエンドポイントとして、対応するエンドポイントが使用されます。 name 属性の既定値は、他の名前と同様に一致する空の文字列です。

すべてのエンドポイントには、エンドポイントを検索および識別するために、アドレスが関連付けられている必要があります。 address 属性は、エンドポイントの場所を示す URL を指定するために使用できます。 ただし、サービス エンドポイントのアドレスは、コードで指定することもできます。その場合は、URI (Uniform Resource Identifier) を作成し、ServiceHost メソッドのいずれかを使用して、この URI を AddServiceEndpoint に追加します。 詳細については、アドレスに関する記事を参照してください。 最初に説明したように、<headers> 要素と <identity> 要素は EndpointAddress の一部であるため、これらについてはアドレスに関するトピックでも説明しています。

binding 属性は、エンドポイントがサービスに接続する際に使用するバインディングの種類を示します。 参照できるようにするには、種類は登録された構成セクションを持っている必要があります。 前の例では、<wsHttpBinding> セクションがこれであり、エンドポイントが WSHttpBinding を使用することを示しています。 ただし、エンドポイントが使用できる、指定された種類のバインディングが複数存在することもあります。 これらは、それぞれ (バインディングの) 種類を表す要素内に独自の <binding> 要素を持ちます。 bindingconfiguration 属性は、同じ種類のバインディングを識別するために使用されます。 この値は、<binding> 要素の name 属性と一致します。 構成を使用してクライアント バインディングを構成する方法の詳細については、「方法: 構成でクライアント バインディングを指定する」を参照してください。

behaviorConfiguration 属性は、エンドポイントが使用する <endpointBehaviors><behavior> を指定するために使用されます。 この値は、<behavior> 要素の name 属性と一致します。 構成を使用してクライアントの動作を指定する例については、「クライアントの動作の構成」を参照してください。

contract 属性は、エンドポイントが公開するコントラクトを指定します。 この値は、ConfigurationNameServiceContractAttribute にマップされます。 既定値は、サービスを実装するクラスの完全な型名です。

メタデータの構成

<metadata> 要素は、メタデータのインポート拡張を登録するための設定を指定するために使用されます。 メタデータ システムの拡張の詳細については、「メタデータ システムの拡張」を参照してください。

関連項目