Angeben des DienstlaufzeitverhaltensSpecifying Service Run-Time Behavior

Nachdem Sie einen Dienstvertrag entworfen (Designing Service Contracts) und implementiert (Implementing Service Contracts) haben, können Sie das Vorgangsverhalten der Dienstlaufzeit konfigurieren.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. In diesem Thema werden vom System bereitgestellte Dienste und Vorhangsverhalten erörtert und beschrieben, wo Sie weitere Informationen zur Erstellung neuer Verhalten finden.This topic discusses system-provided service and operation behaviors and describes where to find more information to create new behaviors. Einige Verhalten werden als Attribute angewendet, aber viele Verhalten werden mithilfe einer Konfigurationsdatei oder programmgesteuert angewendet.While some behaviors are applied as attributes, many are applied using an application configuration file or programmatically. Weitere Informationen zum Konfigurieren der Service-Anwendung finden Sie unter Konfigurieren von Services.For more information about configuring your service application, see Configuring Services.

ÜbersichtOverview

Der Vertrag definiert die Eingaben, Ausgaben, Datentypen und Fähigkeiten eines Diensts dieses Typs.The contract defines the inputs, outputs, data types, and capabilities of a service of that type. Durch die Implementierung eines Dienstvertrags wird eine Klasse erstellt, die den durch sie implementierten Vertrag erfüllt, wenn sie mit einer Bindung an einer Adresse konfiguriert wird.Implementing a service contract creates a class that, when configured with a binding at an address, fulfills the contract it implements. Der Vertrag kennt Vertrags-, Bindungs- und Adressinformationen. Ohne sie kann der Client den Dienst nicht nutzen.Contractual, binding, and address information are all known by the client; without them, the client cannot make use of the service.

Aber Vorgangseinzelheiten, z. B. Threadingprobleme oder Instanzenverwaltung, sind für Clients nicht transparent.However, operation specifics, such as threading issues or instance management, are opaque to clients. Nachdem ein Dienstvertrag implementiert wurde, können Sie mithilfe von Verhalteneine Vielzahl von Vorgangseigenschaften konfigurieren.Once you have implemented your service contract, you can configure a large number of operation characteristics by using behaviors. Verhalten sind die Objekte, die die Windows Communication Foundation (WCF)-Laufzeit zu ändern, indem entweder eine Laufzeiteigenschaft festgelegt oder ein Anpassungstyp in die Laufzeit eingefügt.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. Weitere Informationen zum Ändern von der Laufzeitmoduls durch das Erstellen von benutzerdefinierten Verhalten, finden Sie unter Erweitern von ServiceHost und der Dienstmodellebene.For more information about modifying the runtime by creating user-defined behaviors, see Extending ServiceHost and the Service Model Layer.

Das System.ServiceModel.ServiceBehaviorAttribute-Attribut und das System.ServiceModel.OperationBehaviorAttribute-Attribute sind die Verhalten, die am häufigsten verwendet werden, und sie machen die am häufigsten angeforderten Vorgangsfunktionen verfügbar.The System.ServiceModel.ServiceBehaviorAttribute and System.ServiceModel.OperationBehaviorAttribute attributes are the most widely useful behaviors and expose the most commonly requested operation features. Weil es sich um Attribute handelt, wenden Sie sie auf die Dienst- oder Vorgangsimplementierung an.Because they are attributes, you apply them to the service or operation implementation. Andere Verhalten, wie z. B. System.ServiceModel.Description.ServiceMetadataBehavior oder System.ServiceModel.Description.ServiceDebugBehavior, werden in der Regel mithilfe einer Anwendungskonfigurationsdatei angewendet, obwohl sie auch im Code verwendet werden können.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.

Dieses Thema bietet eine Übersicht über die ServiceBehaviorAttribute und OperationBehaviorAttribute Attribute, beschreibt die verschiedenen Bereiche, die mit der Verhaltensweisen betrieben werden können, und bietet eine kurze Beschreibung der viele der vom System bereitgestellte Verhalten für die verschiedene Bereiche, die von möglicherweise für WCF-Entwickler relevant.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 und OperationBehaviorAttributeServiceBehaviorAttribute and OperationBehaviorAttribute

Die wichtigsten Verhalten sind das ServiceBehaviorAttribute -Attribut und das OperationBehaviorAttribute -Attribut, mit denen Sie Folgendes steuern können:The most important behaviors are the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes, which you can use to control:

  • Lebensdauer von InstanzenInstance lifetimes

  • Unterstützung für Parallelität und SynchronisierungConcurrency and synchronization support

  • KonfigurationsverhaltenConfiguration behavior

  • TransaktionsverhaltenTransaction behavior

  • SerialisierungsverhaltenSerialization behavior

  • MetadatentransformationMetadata transformation

  • SitzungslebensdauerSession lifetime

  • Adressfilterung und HeaderverarbeitungAddress filtering and header processing

  • IdentitätswechselImpersonation

  • Sie verwenden diese Attribute, indem Sie eine Dienst- oder Vorgangsimplementierung mit dem für den betreffenden Bereich geeigneten Attribut markieren und die Eigenschaften festlegen.To use these attributes, mark the service or operation implementation with the attribute appropriate to that scope and set the properties. Im folgenden Codebeispiel wird eine Vorgangsimplementierung veranschaulicht, in der mithilfe der OperationBehaviorAttribute.Impersonation-Eigenschaft festgelegt wird, dass Aufrufer dieses Vorgangs Identitätswechsel unterstützen müssen.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

Viele dieser Eigenschaften erfordern zusätzliche Unterstützung von der Bindung.Many of the properties require additional support from the binding. Beispielsweise muss ein Vorgang, der von einem Client eine Transaktion erfordert, so konfiguriert werden, dass eine Bindung verwendet wird, die übergegangene Transaktionen unterstützt.For example, an operation that requires a transaction from the client must be configured to use a binding that supports flowed transactions.

Bekannte Singleton-DiensteWell-Known Singleton Services

Sie können mit dem ServiceBehaviorAttribute -Attribut und dem OperationBehaviorAttribute -Attribut sowohl bei InstanceContext als auch bei den Dienstobjekten, die die Vorgänge implementieren, die Lebensdauer bestimmter Objekte steuern.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.

Beispielsweise wird über die ServiceBehaviorAttribute.InstanceContextMode-Eigenschaft gesteuert, wie oft der InstanceContext freigegeben wird, und die OperationBehaviorAttribute.ReleaseInstanceMode-Eigenschaft und die ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete-Eigenschaft bestimmen, wann das Dienstobjekt freigegeben wird.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.

Sie können jedoch auch selbst ein Dienstobjekt und den Diensthost, der dieses Objekt verwendet, erstellen.However, you can also create a service object yourself and create the service host using that object. Hierfür müssen Sie auch die ServiceBehaviorAttribute.InstanceContextMode-Eigenschaft auf Single festlegen, damit keine Ausnahme ausgelöst wird, sobald der Diensthost geöffnet wird.To do so, you must also set the ServiceBehaviorAttribute.InstanceContextMode property to Single or an exception is thrown when the service host is opened.

Verwenden Sie zum Erstellen eines solchen Diensts den ServiceHost.ServiceHost(Object, Uri[])-Konstruktor.Use the ServiceHost.ServiceHost(Object, Uri[]) constructor to create such a service. Dieser stellt eine Alternative zur Implementierung eines benutzerdefinierten System.ServiceModel.Dispatcher.IInstanceContextInitializer dar, wenn Sie eine bestimmte Objektinstanz für einen Singleton-Dienst bereitstellen möchten.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. Sie können diese Überladung verwenden, wenn der Dienstimplementierungstyp schwer zu erstellen ist (wenn er z. B. keinen öffentlichen parameterlosen Standardkonstruktor implementiert).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).

Beachten Sie, dass wenn ein Objekt für diesen Konstruktor bereitgestellt wird, einige Funktionen in Bezug auf die Windows Communication Foundation (WCF) Instanziierungsverhaltens unterschiedlich funktionieren.Note that when an object is provided to this constructor, some features related to the Windows Communication Foundation (WCF) instancing behavior work differently. So zeigt zum Beispiel der Aufruf von InstanceContext.ReleaseServiceInstance keine Wirkung, wenn eine bekannte Objektinstanz bereitgestellt wird.For example, calling InstanceContext.ReleaseServiceInstance has no effect when a well-known object instance is provided. Dementsprechend werden auch alle anderen Instanzfreigabemechanismen ignoriert.Similarly, any other instance release mechanism is ignored. Die ServiceHost-Klasse verhält sich immer so, als ob die OperationBehaviorAttribute.ReleaseInstanceMode-Eigenschaft für alle Vorgänge auf ReleaseInstanceMode.None festgelegt ist.The ServiceHost class always behaves as if the OperationBehaviorAttribute.ReleaseInstanceMode property is set to ReleaseInstanceMode.None for all operations.

Andere Dienst-, Endpunkt-, Vertrags- und VorgangsverhaltenOther Service, Endpoint, Contract, and Operation Behaviors

Dienstverhalten, z.&#160;B. das ServiceBehaviorAttribute -Attribut, wirken sich auf den gesamten Dienst aus.Service behaviors, such as the ServiceBehaviorAttribute attribute, operate across an entire service. Wenn Sie beispielsweise die ServiceBehaviorAttribute.ConcurrencyMode-Eigenschaft auf ConcurrencyMode.Multiple-festlegen, müssen Sie Threadsynchronisierungsprobleme in jedem Vorgang innerhalb des betreffenden Diensts selbst behandeln.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. Endpunktverhalten operieren über einen Endpunkt. Viele der vom System bereitgestellten Endpunktverhalten beeinflussen die Clientfunktionalität.Endpoint behaviors operate across an endpoint; many of the system-provided endpoint behaviors are for client functionality. Vertragsverhalten operieren auf Vertragsebene, und Vorgangsverhalten ändern die Vorgangszustellung.Contract behaviors operate at the contract level, and operation behaviors modify operation delivery.

Viele dieser Verhalten werden über Attribute implementiert, und Sie verwenden sie ebenso wie das ServiceBehaviorAttribute -Attribut und das OperationBehaviorAttribute -Attribut, indem Sie sie auf die betreffende Dienstklassen- oder Vorgangsimplementierung anwenden.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. Andere Verhalten, wie z. B. das ServiceMetadataBehavior -Objekt oder das ServiceDebugBehavior -Objekt, werden in der Regel mithilfe einer Anwendungskonfigurationsdatei angewendet, obwohl sie auch im Code verwendet werden können.Other behaviors, such as the ServiceMetadataBehavior or ServiceDebugBehavior objects, are typically applied using an application configuration file, although they can also be used programmatically.

Zum Beispiel wird die Veröffentlichung der Metadaten durch den Einsatz des ServiceMetadataBehavior -Objekts konfiguriert.For example, the publication of metadata is configured by using the ServiceMetadataBehavior object. Die folgende Anwendungskonfigurationsdatei veranschaulicht die gängigste Verwendungsweise.The following application configuration file shows the most common usage.

        // Create a new metadata behavior object and set its properties to 
        // create a secure endpoint. 
        ServiceMetadataBehavior sb = new ServiceMetadataBehavior();
        //sb.EnableHelpPage= true;
        //sb.HttpsGetUrl = new Uri("https://myMachineName:8036/myEndpoint");
        //myServiceHost.Description.Behaviors.Add(sb);
            

    }

      private void SnippetServiceMetadataBehavior()
      {
          // service for which <<indigo2>> automatically adds a 
          // ServiceMetadataBehavior to publish metadata as well as 
          // an HTML service help page

          // from C_HowToSecureEndpoint\cs
          // Create a new metadata behavior object and set its properties to 
          // create a secure endpoint. 
          ServiceMetadataBehavior sb = new ServiceMetadataBehavior();
/*          sb.EnableHelpPage = true;
          sb.enableMetadataExchange = true;
          sb.HttpsGetUrl = new Uri("https://myMachineName:8036/myEndpoint");
          myServiceHost.Description.Behaviors.Add(sb);
 */


      }

    private void Run()
    {

      // T:System.ServiceModel.ServiceMetadataBehavior
      // <Snippet#0>

      // Create a ServiceHost for the service type and use the base address from configuration.
      ServiceHost host = new ServiceHost(typeof(SampleService));
      try
      {
        ServiceMetadataBehavior metad 
          = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
        if (metad == null)
          metad = new ServiceMetadataBehavior();
        metad.HttpGetEnabled = true;
        host.Description.Behaviors.Add(metad);
        host.AddServiceEndpoint(
          ServiceMetadataBehavior.MexContractName, 
          MetadataExchangeBindings.CreateMexHttpBinding(), 
          "mex"
        );

        // The service can now be accessed.
        Console.WriteLine("The service is ready.");
        Console.WriteLine("Press <ENTER> to terminate service.");
        Console.WriteLine();
        Console.ReadLine();

        // Close the ServiceHostBase to shutdown the service.
        host.Close();

        // </Snippet#0>

In den folgenden Abschnitten werden viele der nützlichsten vom System bereitgestellten Verhalten beschrieben, mit denen die Bereitstellung eines Diensts oder Clients zur Laufzeit geändert werden kann.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. Informationen dazu, wann die einzelnen Verhalten verwendet werden, finden Sie im Referenzthema.See the reference topic to determine how to use each one.

DienstverhaltenService Behaviors

Die folgenden Verhalten wirken sich auf Dienste aus.The following behaviors operate on services.

EndpunktverhaltenEndpoint Behaviors

Die folgenden Verhalten wirken sich auf Endpunkte aus.The following behaviors operate on endpoints. Viele dieser Verhalten werden in Clientanwendungen verwendet.Many of these behaviors are used in client applications.

  • CallbackBehaviorAttribute.CallbackBehaviorAttribute. Konfiguriert eine Rückrufdienstimplementierung in einer Duplexclientanwendung.Configures a callback service implementation in a duplex client application.

  • CallbackDebugBehaviorCallbackDebugBehavior. Aktiviert das dienstdebugging für ein Rückrufobjekt für WCF.Enables service debugging for a WCF callback object.

  • ClientCredentialsClientCredentials. Ermöglicht es dem Benutzer, die Client- und Dienstanmeldeinformationen sowie die auf dem Client zu verwendenden Authentifizierungseinstellungen für die Dienstanmeldeinformationen zu konfigurieren.Allows the user to configure client and service credentials as well as service credential authentication settings for use on the client.

  • ClientViaBehavior.ClientViaBehavior. Wird von Clients verwendet, um den URI (Uniform Resource Identifier) anzugeben, für den der Transportkanal erstellt werden soll.Used by clients to specify the Uniform Resource Identifier (URI) for which the transport channel should be created.

  • MustUnderstandBehaviorMustUnderstandBehavior. Weist die WCF zum Deaktivieren der MustUnderstand verarbeiten.Instructs WCF to disable the MustUnderstand processing.

  • SynchronousReceiveBehaviorSynchronousReceiveBehavior. Weist das Laufzeitmodul an, für Kanäle einen synchronen Empfangsprozess zu verwenden.Instructs the runtime to use a synchronous receive process for channels.

  • TransactedBatchingBehavior.TransactedBatchingBehavior. Optimiert die Empfangsvorgänge für Transporte, die transaktionale Empfangsprozesse unterstützen.Optimizes the receive operations for transports that support transactional receives.

VertragsverhaltenContract Behaviors

DeliveryRequirementsAttribute.DeliveryRequirementsAttribute. Gibt die Feature-Anforderungen an, die Bindungen für die Dienst- oder Client-Implementierung liefern müssen.Specifies the feature requirements that bindings must provide to the service or client implementation.

VorgangsverhaltenOperation Behaviors

Die folgenden Vorgangsverhalten geben die Serialisierungs- und Transaktionssteuermechanismen für Vorgänge an.The following operation behaviors specify serialization and transaction controls for operations.

Siehe auchSee Also

Konfigurieren von DienstenConfiguring Services
Vorgehensweise: Steuern der DienstinstanzerstellungHow to: Control Service Instancing