Konfigurieren und Erweitern der Laufzeit mit VerhaltenConfiguring and Extending the Runtime with Behaviors

Verhalten ermöglichen es Ihnen, Standardverhalten ändern und benutzerdefinierte Erweiterungen, die zu überprüfen und Dienstkonfiguration zu überprüfen oder das Laufzeitverhalten in Windows Communication Foundation (WCF)-Client und Dienst Anwendungen hinzufügen.Behaviors enable you to modify default behavior and add custom extensions that inspect and validate service configuration or modify runtime behavior in Windows Communication Foundation (WCF) client and service applications. In diesem Thema werden die Verhaltensschnittstellen beschrieben und erläutert, wie sie implementiert und wie sie zur Dienstbeschreibung (in einer Dienstanwendung) oder zu einem Endpunkt (in einer Clientanwendung) programmgesteuert oder in einer Konfigurationsdatei hinzugefügt werden können.This topic describes the behavior interfaces, how to implement them, and how to add them to the service description (in a service application) or endpoint (in a client application) programmatically or in a configuration file. Weitere Informationen zum Verwenden von vom System bereitgestellte Verhalten, finden Sie unter Run-Time-Dienstverhalten angeben und Angabe zur Laufzeit Clientverhalten.For more information about using system-provided behaviors, see Specifying Service Run-Time Behavior and Specifying Client Run-Time Behavior.

VerhaltenBehaviors

Verhaltenstypen werden hinzugefügt, die Dienst- oder Dienstendpunkt-beschreibungsobjekten (auf der Dienst- bzw. Clientseite bzw.), bevor diese Objekte von Windows Communication Foundation (WCF) verwendet werden, um eine Laufzeit zu erstellen, die einen WCF-Dienst oder einen WCF-Client ausgeführt wird.Behavior types are added to the service or service endpoint description objects (on the service or client, respectively) before those objects are used by Windows Communication Foundation (WCF) to create a runtime that executes a WCF service or a WCF client. Wenn diese Verhaltenstypen während des Lauftzeitkonstruktionsprozesses aufgerufen werden, können sie auf Laufzeiteigenschaften und -methoden zugreifen, die die vom Vertrag, von den Bindungen und von den Adressen erstellte Laufzeit ändern.When these behaviors are called during the runtime construction process they are then able to access runtime properties and methods that modify the runtime constructed by the contract, bindings, and addresses.

VerhaltensmethodenBehavior Methods

Alle Verhaltenstypen verfügen über eine AddBindingParameters-Methode, eine ApplyDispatchBehavior-Methode, eine Validate-Methode und eine ApplyClientBehavior-Methode mit einer Ausnahme: Da IServiceBehavior nicht in einem Client ausgeführt werden kann, wird ApplyClientBehavior nicht implementiert.All behaviors have an AddBindingParameters method, an ApplyDispatchBehavior method, a Validate method, and an ApplyClientBehavior method with one exception: Because IServiceBehavior cannot execute in a client, it does not implement ApplyClientBehavior.

  • Verwenden Sie die AddBindingParameters-Methode, um benutzerdefinierte Objekte zu ändern oder einer Sammlung hinzuzufügen, auf die benutzerdefinierte Bindungen beim Erstellen der Laufzeit für ihre Verwendung zugreifen können.Use the AddBindingParameters method to modify or add custom objects to a collection that custom bindings can access for their use when the runtime is constructed. Ein Beispiel hierfür ist, wie Schutzanforderungen festgelegt werden, die beeinflussen, wie der Kanal erstellt wird, jedoch dem Kanalentwickler nicht bekannt sind.For example, this how protection requirements are specified that affect the way the channel is built, but are not known by the channel developer.

  • Verwenden Sie die Validate-Methode, um die Beschreibungsstruktur und das entsprechende Laufzeitobjekt zu untersuchen und sicherzustellen, dass es einen bestimmten Satz von Kriterien erfüllt.Use the Validate method to examine the description tree and corresponding runtime object to ensure it conforms to some set of criteria.

  • Verwenden Sie die ApplyDispatchBehavior-Methode und die ApplyClientBehavior-Methode, um die Beschreibungsstruktur zu untersuchen und die Laufzeit für einen bestimmten Bereich entweder im Dienst oder auf dem Client zu ändern.Use the ApplyDispatchBehavior and ApplyClientBehavior methods to examine the description tree and modify the runtime for a particular scope on either the service or the client. Sie können auch Erweiterungsobjekte einfügen.You can also insert extension objects as well.

    Hinweis

    Obwohl eine Beschreibungsstruktur in diesen Methoden bereitgestellt wird, dient sie nur zur Überprüfung.Although a description tree is provided in these methods, it is for examination only. Wenn eine Beschreibungsstruktur geändert wird, ist das Verhalten nicht definiert.If a description tree is modified, the behavior is undefined.

Der Zugriff auf die Eigenschaften, die Sie ändern können, und die Anpassungsschnittstellen, die Sie implementieren können, erfolgt über die Dienst- und Clientlaufzeitklassen.The properties you can modify and the customization interfaces you can implement are accessed through the service and client runtime classes. Die Diensttypen sind die DispatchRuntime-Klasse und die DispatchOperation-Klasse.The service types are the DispatchRuntime and DispatchOperation classes. Die Clienttypen sind die ClientRuntime-Klasse und die ClientOperation-Klasse.The client types are the ClientRuntime and ClientOperation classes. Die ClientRuntime-Klasse und die DispatchRuntime-Klasse sind Erweiterungseinstiegspunkte, um clientweit und dienstweit auf Laufzeiteigenschaften bzw. Erweiterungssammlungen zuzugreifen.The ClientRuntime and DispatchRuntime classes are the extensibility entry points to access client-wide and service-wide runtime properties and extension collections, respectively. Entsprechend machen die ClientOperation-Klasse und die DispatchOperation-Klasse Clientvorgangs- und Dienstvorgangslaufzeit-Eigenschaften bzw. Erweiterungssammlungen verfügbar.Similarly, the ClientOperation and DispatchOperation classes expose client operation and service operation runtime properties and extension collections, respectively. Sie können jedoch auf das breiter angelegte Laufzeitobjekt vom Vorgangslaufzeitobjekt aus und umgekehrt zugreifen, sofern erforderlich.You can, however, access the wider scoped runtime object from the operation runtime object and vice versa if need be.

Hinweis

Eine Erläuterung der Laufzeiteigenschaften und Erweiterungstypen enthalten, die Sie verwenden können, um das Ausführungsverhalten eines Clients zu ändern, finden Sie unter Erweitern von Clients.For a discussion of runtime properties and extension types that you can use to modify the execution behavior of a client, see Extending Clients. Eine Erläuterung der Laufzeiteigenschaften und Erweiterungstypen enthalten, die Sie verwenden können, um das Ausführungsverhalten eines Verteilers Dienst zu ändern, finden Sie unter Erweitern von Verteilern.For a discussion of runtime properties and extension types that you can use to modify the execution behavior of a service dispatcher, see Extending Dispatchers.

Die meisten WCF-Benutzer nicht direkt mit der Laufzeit interagieren; Stattdessen verwenden sie kernprogrammierungskonstrukte wie Endpunkte, Verträge, Bindungen, Adressen und Verhaltensattribute für Klassen oder Verhalten in Konfigurationsdateien.Most WCF users do not interact with the runtime directly; instead they use core programming model constructs like endpoints, contracts, bindings, addresses, and behavior attributes on classes or behaviors in configuration files. Diese Konstrukte bilden die beschreibungsstruktur, dies ist die vollständige Spezifikation für die Erstellung einer Laufzeit zur Unterstützung von eines Diensts oder Client von der beschreibungsstruktur beschriebenen.These constructs make up the description tree, which is the complete specification for constructing a runtime to support a service or client described by the description tree.

Es gibt vier Arten von Verhalten in WCF:There are four kinds of behaviors in WCF:

Sie können diese Verhaltenstypen zu verschiedenen Beschreibungsobjekten hinzufügen, indem Sie benutzerdefinierte Attribute implementieren, Anwendungskonfigurationsdateien verwenden oder sie direkt zur Verhaltenssammlung des entsprechenden Beschreibungsobjekts hinzufügen.You can add these behaviors to the various description objects by implementing custom attributes, using application configuration files, or directly by adding them to the behaviors collection on the appropriate description object. Sie müssen jedoch zu einer Dienstbeschreibung oder einem Dienstendpunkt-Beschreibungsobjekt hinzugefügt werden, bevor ICommunicationObject.Open auf dem ServiceHost oder einer ChannelFactory<TChannel> aufgerufen wird.The must, however, be added to a service description or service endpoint description object prior to calling ICommunicationObject.Open on the ServiceHost or a ChannelFactory<TChannel>.

VerhaltensbereicheBehavior Scopes

Es stehen vier Verhaltenstypen zur Verfügung, die jeweils einem bestimmten Bereich des Laufzeitzugriffs entsprechen.There are four behavior types, each of which corresponds to a particular scope of runtime access.

DienstverhaltenService Behaviors

Dienstverhalten, das IServiceBehavior implementiert, ist der Hauptmechanismus, mit dem die gesamte Dienstlaufzeit geändert wird.Service behaviors, which implement IServiceBehavior, are the primary mechanism by which you modify the entire service runtime. Für das Hinzufügen von Dienstverhalten zu einem Dienst stehen drei Mechanismen zur Verfügung.There are three mechanisms for adding service behaviors to a service.

  1. Verwenden eines Attributs in der Dienstklasse.Using an attribute on the service class. Wenn ein ServiceHost-Objekt erstellt wird, wird von der ServiceHost-Implementierung Spiegelung eingesetzt, um den Attributsatz für den Diensttyp zu ermitteln.When a ServiceHost is constructed, the ServiceHost implementation uses reflection to discover the set of attributes on the type of the service. Falls eines der Attribute Implementierungen von IServiceBehavior darstellt, wird es der Verhaltenssammlung für ServiceDescription hinzugefügt.If any of those attributes are implementations of IServiceBehavior, they are added to the behaviors collection on ServiceDescription. Dadurch können diese Verhaltenstypen an der Erstellung der Dienstlaufzeit partizipieren.This allows those behaviors to participate in the construction of the service run time.

  2. Programmgesteuertes Hinzufügen des Verhaltens zur Verhaltenssammlung in ServiceDescription.Programmatically adding the behavior to the behaviors collection on ServiceDescription. Dies kann durch die folgenden Codezeilen erreicht werden:This can be accomplished with the following lines of code:

    ServiceHost host = new ServiceHost(/* Parameters */);  
    host.Description.Behaviors.Add(/* Service Behavior */);  
    
  3. Implementieren eines benutzerdefinierten BehaviorExtensionElement, das die Konfiguration erweitert.Implementing a custom BehaviorExtensionElement that extends configuration. Dies ermöglicht die Verwendung des Dienstverhaltens von Anwendungskonfigurationsdateien aus.This enables the use of the service behavior from application configuration files.

Beispiele für Dienstverhalten in WCF die ServiceBehaviorAttribute -Attribut, das ServiceThrottlingBehavior, und die ServiceMetadataBehavior Verhalten.Examples of service behaviors in WCF include the ServiceBehaviorAttribute attribute, the ServiceThrottlingBehavior, and the ServiceMetadataBehavior behavior.

VertragsverhaltenContract Behaviors

Vertragsverhalten, das die IContractBehavior-Schnittstelle implementiert, dient zur Erweiterung der Client- sowie Dienstlaufzeit in einem Vertrag.Contract behaviors, which implement the IContractBehavior interface, are used to extend both the client and service runtime across a contract.

Für das Hinzufügen von Vertragsverhalten zu einem Vertrag stehen zwei Mechanismen zur Verfügung.There are two mechanisms for adding contract behaviors to a contract. Der erste Mechanismus besteht im Erstellen eines benutzerdefinierten Attributs zur Verwendung in der Vertragsschnittstelle.The first mechanism is to create a custom attribute to be used on the contract interface. Wenn eine Vertragsschnittstelle übergeben entweder eine ServiceHost oder ein ChannelFactory<TChannel>, WCF untersucht die Attribute in der Schnittstelle.When a contract interface is passed to either a ServiceHost or a ChannelFactory<TChannel>, WCF examines the attributes on the interface. Falls eines der Attribute Implementierungen von IContractBehavior darstellt, wird es der Verhaltenssammlung in der für diese Schnittstelle erstellten System.ServiceModel.Description.ContractDescription hinzugefügt.If any attributes are implementations of IContractBehavior, those are added to the behaviors collection on the System.ServiceModel.Description.ContractDescription created for that interface.

Sie können das System.ServiceModel.Description.IContractBehaviorAttribute auch im benutzerdefinierten Vertragsverhaltensattribut implementieren.You can also implement the System.ServiceModel.Description.IContractBehaviorAttribute on the custom contract behavior attribute. In diesem Fall sieht das Verhalten wie folgt aus bei der Anwendung auf:In this case, the behavior is as follows when applied to:

• Eine Vertragsschnittstelle.•A contract interface. In diesem Fall wird das Verhalten für alle Verträge dieses Typs in einen beliebigen Endpunkt angewendet und WCF ignoriert den Wert, der die IContractBehaviorAttribute.TargetContract Eigenschaft.In this case, the behavior is applied to all contracts of that type in any endpoint and WCF ignores the value of the IContractBehaviorAttribute.TargetContract property.

• Eine Dienstklasse.•A service class. In diesem Fall wird das Verhalten nur auf Endpunkte angewendet, deren Vertrag der Wert der TargetContract-Eigenschaft ist.In this case, the behavior is applied only to endpoints the contract of which is the value of the TargetContract property.

• Eine Rückrufklasse.•A callback class. In diesem Fall wird das Verhalten an Endpunkt des duplexclients angewendet und WCF ignoriert den Wert der die TargetContract Eigenschaft.In this case, the behavior is applied to the duplex client's endpoint and WCF ignores the value of the TargetContract property.

Der zweite Mechanismus besteht im Hinzufügen des Verhaltens zur Verhaltenssammlung einer ContractDescription.The second mechanism is to add the behavior to the behaviors collection on a ContractDescription.

Vertragsverhalten in WCF gehören die System.ServiceModel.DeliveryRequirementsAttribute Attribut.Examples of contract behaviors in WCF include the System.ServiceModel.DeliveryRequirementsAttribute attribute. Weitere Informationen und ein Beispiel hierzu finden Sie im Verweisthema.For more information and an example, see the reference topic.

EndpunktverhaltenEndpoint Behaviors

Endpunktverhalten, das IEndpointBehavior implementiert, ist der Hauptmechanismus, mit dem die gesamte Dienst- oder Clientlaufzeit für einen bestimmten Endpunkt geändert wird.Endpoint behaviors, which implement IEndpointBehavior, are the primary mechanism by which you modify the entire service or client run time for a specific endpoint.

Für das Hinzufügen von Endpunktverhalten zu einem Dienst stehen zwei Mechanismen zur Verfügung.There are two mechanisms for adding endpoint behaviors to a service.

  1. Hinzufügen des Verhaltens zur Behaviors-Eigenschaft.Add the behavior to the Behaviors property.

  2. Implementieren eines benutzerdefinierten BehaviorExtensionElement, das die Konfiguration erweitert.Implement a custom BehaviorExtensionElement that extends configuration.

Weitere Informationen und ein Beispiel hierzu finden Sie im Verweisthema.For more information and an example, see the reference topic.

VorgangsverhaltenOperation Behaviors

Vorgangsverhalten, das die IOperationBehavior-Schnittstelle implementiert, dient zur Erweiterung der Client- sowie Dienstlaufzeit für jeden Vorgang.Operation behaviors, which implement the IOperationBehavior interface, are used to extend both the client and service runtime for each operation.

Für das Hinzufügen von Vorgangsverhalten zu einem Vorgang stehen zwei Mechanismen zur Verfügung.There are two mechanisms for adding operation behaviors to an operation. Der erste Mechanismus besteht im Erstellen eines benutzerdefinierten Attributs zur Verwendung in der Methode, die den Vorgang formt.The first mechanism is to create a custom attribute to be used on the method that models the operation. Wenn ein Vorgang hinzugefügt wird entweder ein ServiceHost oder ein ChannelFactory, fügt WCF IOperationBehavior Attribute zur Verhaltenssammlung die OperationDescription für diesen Vorgang erstellten.When an operation is added to either a ServiceHost or a ChannelFactory, WCF adds any IOperationBehavior attributes to the behaviors collection on the OperationDescription created for that operation.

Der zweite Mechanismus besteht im direkten Hinzufügen des Verhaltens zur Verhaltenssammlung einer konstruierten OperationDescription.The second mechanism is by directly adding the behavior to the behaviors collection on a constructed OperationDescription.

Beispiele für Vorgangsverhalten in WCF die OperationBehaviorAttribute und TransactionFlowAttribute.Examples of operation behaviors in WCF include the OperationBehaviorAttribute and the TransactionFlowAttribute.

Weitere Informationen und ein Beispiel hierzu finden Sie im Verweisthema.For more information and an example, see the reference topic.

Verwenden der Konfiguration zur Erstellung von VerhaltenUsing Configuration to Create Behaviors

Dienst-, Endpunkt- und Vertragsverhalten können so konzipiert werden, dass sie in Code oder mithilfe von Attributen angegeben werden. Nur Dienst- und Endpunktverhalten können mit Anwendungs- oder Webkonfigurationsdateien konfiguriert werden.Service and endpoint, and contract behaviors can by designed to be specified in code or using attributes; only service and endpoint behaviors can be configured using application or Web configuration files. Durch das Verfügbarmachen von Verhalten mit Attributen können Entwickler ein Verhalten zum Kompilierungszeitpunkt angeben, das zur Laufzeit weder hinzugefügt, entfernt oder geändert werden kann.Exposing behaviors using attributes allows developers to specify a behavior at compilation-time that cannot be added, removed, or modified at runtime. Dies ist häufig für Verhalten nützlich, das für den korrekten Betrieb eines Diensts immer erforderlich ist (z. B. die transaktionsbezogenen Parameter für das System.ServiceModel.ServiceBehaviorAttribute-Attribut).This is often suitable for behaviors that are always required for the correct operation of a service (for example, the transaction-related parameters to the System.ServiceModel.ServiceBehaviorAttribute attribute). Durch Verfügbarmachen von Verhalten unter Verwendung der Konfiguration können Entwickler die Spezifikation und Konfiguration des Verhaltens den Personen überlassen, die den Dienst bereitstellen.Exposing behaviors using configuration allows developers to leave the specification and configuration of those behaviors to those who deploy the service. Dieses Verfahren ist nützlich für Verhalten, das aus optionalen Komponenten oder einer anderen bereitstellungsspezifischen Konfiguration besteht, wie z. B. ob Metadaten für den Dienst verfügbar gemacht werden oder die spezifische Autorisierungskonfiguration für einen Dienst.This is suitable for behaviors that are optional components or other deployment-specific configuration, such as whether metadata is exposed for the service or the particular authorization configuration for a service.

Hinweis

Sie können konfigurationsunterstützendes Verhalten auch zur Durchsetzung von Unternehmensrichtlinien verwenden, indem sie in die Konfigurationsdatei machine.config eingefügt werden und diese Elemente gesperrt werden.You can also use behaviors that support configuration to enforce company application policies by inserting them into the machine.config configuration file and locking those items down. Eine Beschreibung und ein Beispiel finden Sie unter Vorgehensweise: Sperren Sie die Endpunkte im Unternehmen.For a description and an example, see How to: Lock Down Endpoints in the Enterprise.

Um ein Verhalten unter Verwendung der Konfiguration verfügbar zu machen, muss ein Entwickler eine abgeleitete Klasse von BehaviorExtensionElement erstellen und die Erweiterung anschließend in der Konfiguration registrieren.To expose a behavior using configuration, a developer must create a derived class of BehaviorExtensionElement and then register that extension with configuration.

Das folgende Codebeispiel veranschaulicht, wie ein IEndpointBehavior BehaviorExtensionElement implementiert:The following code example shows how an IEndpointBehavior implements BehaviorExtensionElement:

// BehaviorExtensionElement members  
    public override Type BehaviorType  
    {  
      get { return typeof(EndpointBehaviorMessageInspector); }  
    }  

    protected override object CreateBehavior()  
    {  
      return new EndpointBehaviorMessageInspector();  
    }  

Damit das Konfigurationssystem ein benutzerdefiniertes BehaviorExtensionElement laden kann, muss es als Erweiterung registriert werden.In order for the configuration system to load a custom BehaviorExtensionElement, it must be registered as an extension. Das folgende Codebeispiel zeigt die Konfigurationsdatei für das vorhergehende Endpunktverhalten:The following code example shows the configuration file for the preceding endpoint behavior:

<configuration>  
  <system.serviceModel>  
    <services>  
      <service   
        name="Microsoft.WCF.Documentation.SampleService"  
        behaviorConfiguration="metadataSupport"  
      >  
        <host>  
          <baseAddresses>  
            <add baseAddress="http://localhost:8080/ServiceMetadata" />  
          </baseAddresses>  
        </host>  
        <endpoint  
          address="/SampleService"  
          binding="wsHttpBinding"  
          behaviorConfiguration="withMessageInspector"   
          contract="Microsoft.WCF.Documentation.ISampleService"  
        />  
        <endpoint  
           address="mex"  
           binding="mexHttpBinding"  
           contract="IMetadataExchange"  
        />  
      </service>  
    </services>  
    <behaviors>  
      <serviceBehaviors>  
      <behavior name="metadataSupport">  
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>  
      </behavior>  
      </serviceBehaviors>  
      <endpointBehaviors>  
        <behavior name="withMessageInspector">  
          <endpointMessageInspector />  
        </behavior>  
      </endpointBehaviors>  
    </behaviors>  
    <extensions>  
      <behaviorExtensions>  
        <add   
          name="endpointMessageInspector"  
          type="Microsoft.WCF.Documentation.EndpointBehaviorMessageInspector, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"  
        />  
      </behaviorExtensions>  
    </extensions>  
  </system.serviceModel>  
</configuration>  

Wobei Microsoft.WCF.Documentation.EndpointBehaviorMessageInspector ist der verhaltenserweiterungstyp und HostApplication ist der Name der Assembly, zu der diese Klasse kompiliert wurde.Where Microsoft.WCF.Documentation.EndpointBehaviorMessageInspector is the behavior extension type and HostApplication is the name of the assembly into which that class has been compiled.

AuswertungsreihenfolgeEvaluation Order

Die System.ServiceModel.ChannelFactory<TChannel> und der System.ServiceModel.ServiceHost sind für das Erstellen der Laufzeit aus dem Programmierungsmodell und der Beschreibung verantwortlich.The System.ServiceModel.ChannelFactory<TChannel> and the System.ServiceModel.ServiceHost are responsible for building the runtime from the programming model and description. Verhaltenstypen, wie zuvor beschrieben, tragen zu diesem Erstellungsprozess auf der Dienst-, Endpunkt-, Vertrags- und Vorgangsebene bei.Behaviors, as previously described, contribute to that build process at the service, endpoint, contract, and operation.

Der ServiceHost wendet Verhalten in folgender Reihenfolge an:The ServiceHost applies behaviors in the following order:

  1. DienstService

  2. VertragContract

  3. EndpunktEndpoint

  4. VorgangOperation

Innerhalb einer Verhaltenssammlung wird keine Reihenfolge garantiert.Within any collection of behaviors, no order is guaranteed.

Der ChannelFactory<TChannel> wendet Verhalten in folgender Reihenfolge an:The ChannelFactory<TChannel> applies behaviors in the following order:

  1. VertragContract

  2. EndpunktEndpoint

  3. VorgangOperation

Innerhalb einer Verhaltenssammlung wird auch in diesem Fall keine Reihenfolge garantiert.Within any collection of behaviors, again, no order is guaranteed.

Programmgesteuertes Hinzufügen von VerhaltenAdding Behaviors Programmatically

Eigenschaften von System.ServiceModel.Description.ServiceDescription in der Dienstanwendung dürfen nicht im Anschluss an die CommunicationObject.OnOpening-Methode auf System.ServiceModel.ServiceHostBase geändert werden.Properties of the System.ServiceModel.Description.ServiceDescription in the service application must not be modified subsequent to the CommunicationObject.OnOpening method on System.ServiceModel.ServiceHostBase. Einige Member, wie die ServiceHostBase.Credentials-Eigenschaft und die AddServiceEndpoint-Methoden auf ServiceHostBase und System.ServiceModel.ServiceHost, lösen eine Ausnahme aus, wenn eine Änderung über diesen Punkt hinaus stattfindet.Some members, like the ServiceHostBase.Credentials property and the AddServiceEndpoint methods on ServiceHostBase and System.ServiceModel.ServiceHost, throw an exception if modified past that point. Andere Member können geändert werden, wobei das Ergebnis jedoch nicht definiert ist.Others permit you to modify them, but the result is undefined.

Ähnlich verhält es sich mit den System.ServiceModel.Description.ServiceEndpoint-Werten, die auf dem Client nach dem Aufruf von OnOpening auf System.ServiceModel.ChannelFactory nicht geändert werden dürfen.Similarly, on the client the System.ServiceModel.Description.ServiceEndpoint values must not be modified after the call to OnOpening on the System.ServiceModel.ChannelFactory. Die ChannelFactory.Credentials-Eigenschaft löst eine Ausnahme aus, wenn sie über diesen Punkt hinaus geändert wird. Die anderen Clientbeschreibungswerte können jedoch ohne Fehler geändert werden.The ChannelFactory.Credentials property throws an exception if modified past that point, but the other client description values can be modified without error. Das Ergebnis ist allerdings nicht definiert.The result, however, is undefined.

Sowohl für den Dienst als auch den Client wird empfohlen, die Beschreibung vor dem Aufruf von CommunicationObject.Open zu ändern.Whether for the service or client, it is recommended that you modify the description prior to calling CommunicationObject.Open.

Vererbungsregeln für VerhaltensattributeInheritance Rules for Behavior Attributes

Alle vier Verhaltenstypen können mit Attributen aufgefüllt werden – Dienstverhalten und Vertragsverhalten.All four types of behaviors can be populated using attributes – service behaviors and contract behaviors. Da Attribute für verwaltete Objekte und Member definiert werden und verwaltete Objekte und Member die Vererbung unterstützen, ist es notwendig zu definieren, wie Verhaltensattribute im Vererbungskontext funktionieren.Because attributes are defined on managed objects and members, and managed objects and members support inheritance, it is necessary to define how behavior attributes work in the context of inheritance.

Auf höherer Ebene gilt die Regel, dass für einen bestimmten Bereich (z. B. Dienst, Vertrag oder Vorgang) alle Verhaltensattribute in der Vererbungshierarchie für diesen Bereich angewendet werden.At a high level, the rule is that for a particular scope (for example, service, contract, or operation), all behavior attributes in the inheritance hierarchy for that scope are applied. Wenn zwei Verhaltensattribute desselben Typs vorhanden sind, wird nur der Typ mit den meisten Ableitungen verwendet.If there are two behavior attributes of the same type, only the most-derived type is used.

DienstverhaltenService Behaviors

Für eine bestimmte Dienstklasse werden alle Dienstverhaltensattribute für diese Klasse und für übergeordnete Elemente dieser Klasse angewendet.For a given service class, all service behavior attributes on that class, and on parents of that class, are applied. Wenn derselbe Attributtyp an mehreren Stellen der Vererbungshierarchie angewendet wird, wird nur der Typ mit den meisten Ableitungen verwendet.If the same type of attribute is applied at multiple places in the inheritance hierarchy, the most-derived type is used.

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]  
[AspNetCompatibilityRequirementsAttribute(  
    AspNetCompatibilityRequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]  
public class A { /* … */ }  

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]  
public class B : A { /* … */}  

Im vorhergehenden Fall weist der Dienst B am Ende den InstanceContextMode-Modus Single, den AspNetCompatibilityRequirementsMode-Modus Allowed und den ConcurrencyMode-Modus Single auf.For example, in the preceding case, the service B ends up with an InstanceContextMode of Single, an AspNetCompatibilityRequirementsMode mode of Allowed, and a ConcurrencyMode of Single. Der ConcurrencyMode-Modus lautet Single, da das ServiceBehaviorAttribute-Attribut für den Dienst B "mehr Ableitungen" aufweist als Dienst A.The ConcurrencyMode is Single, because ServiceBehaviorAttribute attribute on service B is on "more derived" than that on service A.

VertragsverhaltenContract Behaviors

Für einen bestimmten Vertrag werden alle Vertragsverhaltensattribute für diese Schnittstelle und für übergeordnete Elemente dieser Schnittstelle angewendet.For a given contract, all contract behavior attributes on that interface and on parents of that interface, are applied. Wenn derselbe Attributtyp an mehreren Stellen der Vererbungshierarchie angewendet wird, wird nur der Typ mit den meisten Ableitungen verwendet.If the same type of attribute is applied at multiple places in the inheritance hierarchy, the most-derived type is used.

VorgangsverhaltenOperation Behaviors

Wenn ein bestimmter Vorgang einen vorhandenen abstrakten oder virtuellen Vorgang nicht überschreibt, werden keine Vererbungsregeln angewendet.If a given operation does not override an existing abstract or virtual operation, no inheritance rules apply.

Wenn ein Vorgang einen vorhandenen Vorgang überschreibt, werden alle Vorgangsverhaltensattribute für diesen Vorgang und für die übergeordneten Elemente dieses Vorgangs angewendet.If an operation does override an existing operation, then all operation behavior attributes on that operation and on parents of that operation, are applied. Wenn derselbe Attributtyp an mehreren Stellen der Vererbungshierarchie angewendet wird, wird nur der Typ mit den meisten Ableitungen verwendet.If the same type of attribute is applied at multiple places in the inheritance hierarchy, the most-derived type is used.