サービスのランタイム動作の指定Specifying Service Run-Time Behavior

サービス コントラクトを設計して (Designing Service Contracts)、実装 (Implementing Service Contracts) が終わると、サービス ランタイムの実行動作を構成できます。Once you have designed a service contract (Designing Service Contracts) and implemented your service contract (Implementing Service Contracts) you can configure the operation behavior of the service runtime. ここでは、システム指定のサービスと操作の動作について説明し、新しい動作を作成するための詳細情報の参照先を示します。This topic discusses system-provided service and operation behaviors and describes where to find more information to create new behaviors. 一部の動作は属性として適用されますが、多くの動作はアプリケーション構成ファイルまたはプログラムを使用して適用されます。While some behaviors are applied as attributes, many are applied using an application configuration file or programmatically. サービス アプリケーションの構成の詳細については、次を参照してください。サービスを構成するします。For more information about configuring your service application, see Configuring Services.

概要Overview

コントラクトは、その種類のサービスの入力、出力、データ型、および機能を定義します。The contract defines the inputs, outputs, data types, and capabilities of a service of that type. サービス コントラクトを実装すると、クラスが 1 つ作成されます。このクラスを任意のアドレスのバインディングで構成すると、実装されたコントラクトが満たされます。Implementing a service contract creates a class that, when configured with a binding at an address, fulfills the contract it implements. コントラクト、バインディング、およびアドレスはすべて、クライアントにとって既知の情報です。これらの情報がないと、クライアントはサービスを利用できません。Contractual, binding, and address information are all known by the client; without them, the client cannot make use of the service.

ただし、実行の詳細 (スレッド処理の問題点やインスタンスの管理など) は、クライアントには見えません。However, operation specifics, such as threading issues or instance management, are opaque to clients. サービス コントラクトを実装したら、 動作を使用してさまざまな操作特性を構成できます。Once you have implemented your service contract, you can configure a large number of operation characteristics by using behaviors. ビヘイビアーとは、ランタイム プロパティを設定またはカスタマイズ種類をランタイムに挿入することで、Windows Communication Foundation (WCF) ランタイムを変更するオブジェクトです。Behaviors are objects that modify the Windows Communication Foundation (WCF) runtime by either setting a runtime property or by inserting a customization type into the runtime. ユーザー定義の動作を作成して、ランタイムを変更する方法の詳細については、次を参照してください。 Extending ServiceHost とサービス モデル レイヤーします。For more information about modifying the runtime by creating user-defined behaviors, see Extending ServiceHost and the Service Model Layer.

System.ServiceModel.ServiceBehaviorAttributeSystem.ServiceModel.OperationBehaviorAttribute 属性は、最も広範に使用できる動作であり、最も一般的に要求される操作機能を公開します。The System.ServiceModel.ServiceBehaviorAttribute and System.ServiceModel.OperationBehaviorAttribute attributes are the most widely useful behaviors and expose the most commonly requested operation features. これらは属性であるため、サービス実装または操作実装に適用します。Because they are attributes, you apply them to the service or operation implementation. その他の動作 ( System.ServiceModel.Description.ServiceMetadataBehaviorSystem.ServiceModel.Description.ServiceDebugBehaviorなど) は、通常、アプリケーション構成ファイルを使用して適用されますが、プログラムにより使用することもできます。Other behaviors, such as the System.ServiceModel.Description.ServiceMetadataBehavior or System.ServiceModel.Description.ServiceDebugBehavior, are typically applied using an application configuration file, although you can use them programmatically.

このトピックの概要を示します、ServiceBehaviorAttributeOperationBehaviorAttribute属性、ビヘイビアーが動作できるあるさまざまなスコープについて説明し、多くの可能性のあるさまざまなスコープでシステム指定の動作の簡単に説明しますWCF の開発者を対象。This topic provides an overview of the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes, describes the various scopes at which behaviors can operate, and provides a quick description of many of the system-provided behaviors at the various scopes that may be of interest to WCF developers.

ServiceBehaviorAttribute と OperationBehaviorAttributeServiceBehaviorAttribute and OperationBehaviorAttribute

最も重要な動作は ServiceBehaviorAttribute 属性と OperationBehaviorAttribute 属性です。これらの属性を使用すると、以下を制御できます。The most important behaviors are the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes, which you can use to control:

  • インスタンスの有効期間Instance lifetimes

  • コンカレンシーと同期のサポートConcurrency and synchronization support

  • 構成の動作Configuration behavior

  • トランザクションの動作Transaction behavior

  • シリアル化の動作Serialization behavior

  • メタデータの変換Metadata transformation

  • セッションの有効期間Session lifetime

  • アドレス フィルターとヘッダー処理Address filtering and header processing

  • 偽装Impersonation

  • これらの属性を使用するには、サービス実装または操作実装をそのスコープに適切な属性でマークし、プロパティを設定します。To use these attributes, mark the service or operation implementation with the attribute appropriate to that scope and set the properties. たとえば、次のコード例は、 OperationBehaviorAttribute.Impersonation プロパティを使用した操作実装を示しています。この実装では、この操作の呼び出し元が偽装をサポートするように要求します。For example, the following code example shows an operation implementation that uses the OperationBehaviorAttribute.Impersonation property to require that callers of this operation support impersonation.

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Name="SampleHello",
    Namespace="http://microsoft.wcf.documentation"
  )]
  public interface IHello
  {
    [OperationContract]
    string Hello(string greeting);
  }

  public class HelloService : IHello
  {

    public HelloService()
    {
      Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
    }

    ~HelloService()
    {
      Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
    }

    [OperationBehavior(Impersonation=ImpersonationOption.Required)]
    public string Hello(string greeting)
    {
      Console.WriteLine("Called by: " + Thread.CurrentPrincipal.Identity.Name);
      Console.WriteLine("IsAuthenticated: " + Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString());
      Console.WriteLine("AuthenticationType: " + Thread.CurrentPrincipal.Identity.AuthenticationType.ToString());

      Console.WriteLine("Caller sent: " + greeting);
      Console.WriteLine("Sending back: Hi, " + Thread.CurrentPrincipal.Identity.Name);
      return "Hi, " + Thread.CurrentPrincipal.Identity.Name;
    }
  }
}
Imports System.ServiceModel
Imports System.Threading

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Name:="SampleHello", Namespace:="http://microsoft.wcf.documentation")> _
  Public Interface IHello
    <OperationContract> _
    Function Hello(ByVal greeting As String) As String
  End Interface

  Public Class HelloService
      Implements IHello

    Public Sub New()
      Console.WriteLine("Service object created: " & Me.GetHashCode().ToString())
    End Sub

    Protected Overrides Sub Finalize()
      Console.WriteLine("Service object destroyed: " & Me.GetHashCode().ToString())
    End Sub

    <OperationBehavior(Impersonation:=ImpersonationOption.Required)> _
    Public Function Hello(ByVal greeting As String) As String Implements IHello.Hello
      Console.WriteLine("Called by: " & Thread.CurrentPrincipal.Identity.Name)
      Console.WriteLine("IsAuthenticated: " & Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString())
      Console.WriteLine("AuthenticationType: " & Thread.CurrentPrincipal.Identity.AuthenticationType.ToString())

      Console.WriteLine("Caller sent: " & greeting)
      Console.WriteLine("Sending back: Hi, " & Thread.CurrentPrincipal.Identity.Name)
      Return "Hi, " & Thread.CurrentPrincipal.Identity.Name
    End Function
  End Class
End Namespace

これらのプロパティの多くは、バインディングによる追加のサポートを必要とします。Many of the properties require additional support from the binding. たとえば、クライアントからのトランザクションを要求する操作は、フロー トランザクションをサポートするバインディングを使用するように構成される必要があります。For example, an operation that requires a transaction from the client must be configured to use a binding that supports flowed transactions.

既知のシングルトン サービスWell-Known Singleton Services

ServiceBehaviorAttribute 属性と OperationBehaviorAttribute 属性を使用すると、特定の有効期間 ( InstanceContext の有効期間と操作を実装するサービス オブジェクトの有効期間の両方) を制御できます。You can use the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes to control certain lifetimes, both of the InstanceContext and of the service objects that implement the operations.

たとえば、 ServiceBehaviorAttribute.InstanceContextMode プロパティは InstanceContext の解放頻度を制御し、 OperationBehaviorAttribute.ReleaseInstanceMode プロパティと ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete プロパティはサービス オブジェクトを解放するタイミングを制御します。For example, the ServiceBehaviorAttribute.InstanceContextMode property controls how often the InstanceContext is released, and the OperationBehaviorAttribute.ReleaseInstanceMode and ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete properties control when the service object is released.

ただし、サービス オブジェクトを独自に作成し、そのオブジェクトを使用するサービス ホストを作成することもできます。However, you can also create a service object yourself and create the service host using that object. そのためには、 ServiceBehaviorAttribute.InstanceContextMode プロパティを Single に設定するか、サービス ホストが開かれたときに例外をスローする必要があります。To do so, you must also set the ServiceBehaviorAttribute.InstanceContextMode property to Single or an exception is thrown when the service host is opened.

このようなサービスを作成するには、 ServiceHost.ServiceHost(Object, Uri[]) コンストラクターを使用します。Use the ServiceHost.ServiceHost(Object, Uri[]) constructor to create such a service. この方法は、シングルトン サービスが使用する特定のオブジェクト インスタンスを提供する場合に、カスタムの System.ServiceModel.Dispatcher.IInstanceContextInitializer を実装する代わりに使用できます。It provides an alternative to implementing a custom System.ServiceModel.Dispatcher.IInstanceContextInitializer when you wish to provide a specific object instance for use by a singleton service. サービス実装の型を作成することが困難な場合 (たとえば、パラメーターがない既定のコンストラクターが作成されない場合) は、このオーバーロードを使用できます。You can use this overload when your service implementation type is difficult to construct (for example, if it does not implement a default public constructor that has no parameters).

あるオブジェクトをこのコンス トラクターに指定するとと、いくつか機能の動作をインスタンス化 Windows Communication Foundation (WCF) に関連する動作が異なりますに注意してください。Note that when an object is provided to this constructor, some features related to the Windows Communication Foundation (WCF) instancing behavior work differently. たとえば、既知のオブジェクト インスタンスを指定した場合、 InstanceContext.ReleaseServiceInstance を呼び出しても効果はありません。For example, calling InstanceContext.ReleaseServiceInstance has no effect when a well-known object instance is provided. 他のインスタンス解放機構も、同様に無視されます。Similarly, any other instance release mechanism is ignored. ServiceHost クラスは常に、すべての操作について OperationBehaviorAttribute.ReleaseInstanceMode プロパティが ReleaseInstanceMode.None に設定されているかのように動作します。The ServiceHost class always behaves as if the OperationBehaviorAttribute.ReleaseInstanceMode property is set to ReleaseInstanceMode.None for all operations.

その他のサービス、エンドポイント、コントラクト、および操作の動作Other Service, Endpoint, Contract, and Operation Behaviors

ServiceBehaviorAttribute 属性などのサービスの動作は、サービス全体に影響します。Service behaviors, such as the ServiceBehaviorAttribute attribute, operate across an entire service. たとえば、 ServiceBehaviorAttribute.ConcurrencyMode プロパティを ConcurrencyMode.Multiple に設定すると、そのサービスの各操作で発生するスレッドの同期の問題を自分で処理する必要があります。For example, if you set the ServiceBehaviorAttribute.ConcurrencyMode property to ConcurrencyMode.Multiple you must handle thread synchronization issues inside each operation in that service yourself. エンドポイントの動作はエンドポイント全体に影響し、システム指定のエンドポイントの動作はクライアント機能に対して影響します。Endpoint behaviors operate across an endpoint; many of the system-provided endpoint behaviors are for client functionality. また、コントラクトの動作はコントラクト レベルで影響し、操作の動作は操作の実行を変更します。Contract behaviors operate at the contract level, and operation behaviors modify operation delivery.

これらの動作の多くは属性に実装され、適切なサービス クラスまたは操作実装に適用することによって ServiceBehaviorAttribute 属性および OperationBehaviorAttribute 属性を使用するときにこれらの動作を利用できます。Many of these behaviors are implemented on attributes, and you make use of them as you do the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes—by applying them to the appropriate service class or operation implementation. その他の動作 ( ServiceMetadataBehavior オブジェクトや ServiceDebugBehavior オブジェクトなど) は、通常、アプリケーション構成ファイルを使用して適用されますが、プログラムにより使用することもできます。Other behaviors, such as the ServiceMetadataBehavior or ServiceDebugBehavior objects, are typically applied using an application configuration file, although they can also be used programmatically.

たとえば、メタデータの公開は、 ServiceMetadataBehavior オブジェクトを使用して構成されます。For example, the publication of metadata is configured by using the ServiceMetadataBehavior object. 次のアプリケーション構成ファイルは、最も一般的な使用方法を示しています。The following application configuration file shows the most common usage.

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="metadataSupport"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/SampleService" />
          </baseAddresses>
        </host>
        <endpoint
          address=""
          binding="wsHttpBinding"
          contract="Microsoft.WCF.Documentation.ISampleService"
        />
        <!-- Adds a WS-MetadataExchange endpoint at -->
        <!-- "http://localhost:8080/SampleService/mex" -->
        <endpoint
           address="mex"
           binding="mexHttpBinding"
           contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
      <behavior name="metadataSupport">
        <!-- Enables the IMetadataExchange endpoint in services that -->
        <!-- use "metadataSupport" in their behaviorConfiguration attribute. -->
        <!-- In addition, the httpGetEnabled and httpGetUrl attributes publish -->
        <!-- Service metadata for retrieval by HTTP/GET at the address -->
        <!-- "http://localhost:8080/SampleService?wsdl" -->
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  </system.serviceModel>
</configuration>

以下のセクションでは、サービスまたはクライアントのランタイム実行を変更する際に最も役立つ、さまざまなシステム指定の動作について説明します。The following sections describe many of the most useful system-provided behaviors that you can use to modify the runtime delivery of your service or client. リファレンス トピックを参照して、各動作の使用方法を確認してください。See the reference topic to determine how to use each one.

サービスの動作Service Behaviors

次の動作は、サービスに影響します。The following behaviors operate on services.

エンドポイントの動作Endpoint Behaviors

以下の動作は、エンドポイントに影響します。The following behaviors operate on endpoints. これらの動作の多くは、クライアント アプリケーションで使用されます。Many of these behaviors are used in client applications.

  • CallbackBehaviorAttributeCallbackBehaviorAttribute. 双方向クライアント アプリケーションのコールバック サービス実装を構成します。Configures a callback service implementation in a duplex client application.

  • CallbackDebugBehaviorCallbackDebugBehavior. サービスが WCF のコールバック オブジェクトのデバッグを有効にします。Enables service debugging for a WCF callback object.

  • ClientCredentialsClientCredentials. クライアントとサービスの資格情報、およびクライアントで使用するサービス資格情報の認証設定をユーザーが構成できるようにします。Allows the user to configure client and service credentials as well as service credential authentication settings for use on the client.

  • ClientViaBehaviorClientViaBehavior. トランスポート チャネルを作成する対象の URI (Uniform Resource Identifier) を指定するために、クライアントが使用します。Used by clients to specify the Uniform Resource Identifier (URI) for which the transport channel should be created.

  • MustUnderstandBehaviorMustUnderstandBehavior. WCF を無効にするように指示します、MustUnderstand処理します。Instructs WCF to disable the MustUnderstand processing.

  • SynchronousReceiveBehaviorSynchronousReceiveBehavior. チャネルの同期受信プロセスを使用するようにランタイムに指示します。Instructs the runtime to use a synchronous receive process for channels.

  • TransactedBatchingBehaviorTransactedBatchingBehavior. トランザクションの受信をサポートするトランスポートの受信操作を最適化します。Optimizes the receive operations for transports that support transactional receives.

コントラクトの動作Contract Behaviors

DeliveryRequirementsAttributeDeliveryRequirementsAttribute. バインディングがサービスまたはクライアントの実装に対して提供する必要がある機能要件を指定します。Specifies the feature requirements that bindings must provide to the service or client implementation.

操作の動作Operation Behaviors

以下の操作の動作は、操作のシリアル化制御およびトランザクション制御を指定します。The following operation behaviors specify serialization and transaction controls for operations.

関連項目See also