構成ファイルを使用してサービスを構成する方法
構成ファイルを使用して Windows Communication Foundation (WCF) サービスを構成すると、デザイン時ではなく配置時にエンドポイントとサービス動作のデータを指定できるという柔軟性が生まれます。ここでは使用可能な主要な技術について説明します。
WCF サービスは、.NET Framework の構成技術を使用して構成できます。通常、XML 要素は、WCF サービスをホストするインターネット インフォメーション サービス (IIS) サイトの Web.config ファイルに追加されます。この要素によって、コンピュータごとにエンドポイント アドレス (サービスと通信するために使用する実際のアドレス) などの詳細情報を変更できます。また、WCF には、システム指定の要素がいくつか用意されており、これらの要素によって、サービスの最も基本的な機能を簡単に選択できます。実際、WCF アプリケーションのプログラミングにおいては、構成ファイルの記述が作業の大きな部分を占めます。
詳細な情報については、次のページを参照してください。 「Windows Communication Foundation サービスのバインディングの構成」を参照してください。最もよく使用される要素の一覧については、「システム標準のバインディング」を参照してください。
System.Configuration: Web.config と App.config
WCF では、.NET Framework の System.Configuration 構成システムを使用します。
Visual Studio でサービスを構成するとき、Web.config ファイルまたは App.config ファイルのいずれかを使用して、設定を指定します。選択する構成ファイル名は、サービスに選択したホスト環境によって異なります。サービスのホストに IIS を使用している場合は、Web.config ファイルを使用します。他のホスト環境を使用している場合、App.config ファイルを使用します。
Visual Studio では、App.config という名前のファイルを使用して、最終の構成ファイルを作成します。構成で実際に使用される最終的な名前は、アセンブリ名によって異なります。たとえば、アセンブリ名が "Cohowinery.exe" の場合、最終の構成ファイルの名前は "Cohowinery.exe.config" になります。ただし、変更する必要があるのは App.config ファイルだけです。このファイルで行った変更は、コンパイル時に自動的に最終のアプリケーション構成ファイルに反映されます。
App.config ファイルを使用しているとき、アプリケーションが開始され、構成が適用されると、構成システムは App.config ファイルを Machine.config ファイルの内容とマージします。このしくみによって、Machine.config ファイルにはコンピュータ全体の設定を定義できます。App.config ファイルは、Machine.config ファイルの設定をオーバーライドするために使用できます。また、Machine.config ファイルにある設定をロックしてこの設定が使用されるようにすることもできます。Web.config の場合、構成システムは、アプリケーション ディレクトリまでのすべてのディレクトリにある Web.config ファイルを適用される構成にマージします。構成と設定の優先順位詳細については、 、「System.Configuration 名前空間」のトピックを参照してください。
構成ファイルの主要セクション
構成ファイルの主要セクションには、次の要素があります。
<system.ServiceModel>
<services>
<service>
<endpoint/>
</service>
</services>
<bindings>
<!-- Specify one or more of the system-provided binding elements,
for example, <basicHttpBinding> -->
<!-- Alternatively, <customBinding> elements. -->
<binding>
<!-- For example, a <BasicHttpBinding> element. -->
</binding>
</bindings>
<behaviors>
<!-- One or more of the system-provided or custom behavior elements. -->
<behavior>
<!-- For example, a <throttling> element. -->
</behavior>
</behaviors>
</system.ServiceModel>
メモ : |
---|
バインディングと動作のセクションは省略可能であり、必要な場合のみ追加されます。 |
<services> 要素
services 要素には、アプリケーションによってホストされるすべてのサービスの仕様が入ります。
<service> 要素
各サービスには次の属性があります。
- name - サービス コントラクトの実装を提供する型を指定します。これは、完全修飾名 (名前空間と型の名前) になります。
- behaviorConfiguration - behaviors 要素に存在するいずれかの behavior 要素の名前を指定します。指定された動作は、サービスが偽装を許可するかどうかなどのアクションを制御します。
- <service> element reference
<endpoint> 要素
各エンドポイントには、次の属性で表されるアドレス、バインディング、およびコントラクトが必要です。
- address. サービスの URI (Uniform Resource Identifier) を指定します。絶対アドレスまたはサービスのベース アドレスからの相対アドレスを指定できます。空の文字列を設定した場合、サービスの ServiceHost を作成するときに指定したベース アドレスでエンドポイントを使用できることを示します。
- binding - 通常、WsHttpBinding などのシステム指定のバインディングを指定しますが、ユーザー定義バインディングを指定することも可能です。指定するバインディングによって、トランスポートの種類、使用するセキュリティとエンコーディング、および信頼できるセッション、トランザクション、またはストリーミングがサポートされるかどうか、または有効かどうかが決まります。
- bindingConfiguration. バインディングの既定値を変更する必要がある場合、bindings 要素の該当する binding 要素を構成することによって変更できます。この属性には、既定値の変更に使用される binding 要素のname 属性と同じ値を指定する必要があります。
- contract. コントラクトを定義するインターフェイスを指定します。これは service 要素の name 属性で指定された共通言語ランタイム (CLR) 型で実装されたインターフェイスです。
- <endpoint> element reference
<bindings> 要素
bindings 要素には、任意のサービスで定義される任意のエンドポイントによって使用できるすべてのバインディングに関する仕様が入ります。
<binding> 要素
bindings 要素に含まれる binding 要素には、システム指定のバインディング (「システム標準のバインディング」を参照) またはカスタム バインディング (「カスタム バインディング」を参照) のどちらかを指定できます。binding 要素には、バインディングを endpoint 要素の bindingConfiguration 属性で指定されたエンドポイントと関連付ける name 属性があります。
サービスとクライアントを構成する方法詳細については、 、「Windows Communication Foundation アプリケーションの構成」を参照してください。
<behaviors> 要素
これは、サービスの動作を定義する behavior 要素のコンテナ要素です。
<behavior> 要素
各 behavior 要素は、name 属性によって識別され、<throttling> などのシステム指定の動作またはカスタム動作のいずれかを定義します。
バインディングと動作の構成を使用する方法
WCF では、構成で参照システムを使用することによって、エンドポイント間で構成を簡単に共有できます。構成値を直接エンドポイントに割り当てるのではなく、バインディング関連の構成値を <binding>
セクションの bindingConfiguration 要素にグループ化します。バインディング構成とは、バインディングの設定の名前付きグループです。エンドポイントは、名前によって bindingConfiguration を参照できます。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="myBindingConfiguration1" closeTimeout="00:01:00" />
<binding name="myBindingConfiguration2" closeTimeout="00:02:00" />
</basicHttpBinding>
</bindings>
<services>
<service name="myServiceType">
<endpoint
address="myAddress" binding="basicHttpBinding"
bindingConfiguration="myBindingConfiguration1" />
</service>
</services>
</system.serviceModel>
</configuration>
bindingConfiguration の name は、<binding>
要素で設定します。name には、バインディングの種類 (この場合は <basicHttpBinding> のスコープ内で一意の文字列) を指定する必要があります。エンドポイントは、bindingConfiguration 属性をこの文字列に設定することによって構成にリンクします。
behaviorConfiguration は、次のサンプルに示すように、同じ方法で実装されます。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="myBehavior">
<callbackDebug includeExceptionDetailInFaults="true" />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="NewServiceType">
<endpoint
address="myAddress" behaviorConfiguration="myBehavior"
binding="basicHttpBinding" />
</service>
</services>
</system.serviceModel>
</configuration>
このシステムでは、設定を再定義することなく、エンドポイント間で共通の構成を共有できます。コンピュータ全体のスコープが必要な場合は、バインディングまたは動作の構成を Machine.config に作成します。構成設定は、すべての App.config ファイルで操作できます。Configuration Editor Tool (SvcConfigEditor.exe) を使用すると、構成の作成を簡単に行うことができます。
関連項目
その他の技術情報
Windows Communication Foundation アプリケーションの構成
<service>
<binding>