Teilen über


ServiceBehaviorAttribute Klasse

Definition

Gibt das interne Ausführungsverhalten einer Dienstvertragsimplementierung an.

public ref class ServiceBehaviorAttribute sealed : Attribute, System::ServiceModel::Description::IServiceBehavior
[System.AttributeUsage(System.AttributeTargets.Class)]
public sealed class ServiceBehaviorAttribute : Attribute, System.ServiceModel.Description.IServiceBehavior
[<System.AttributeUsage(System.AttributeTargets.Class)>]
type ServiceBehaviorAttribute = class
    inherit Attribute
    interface IServiceBehavior
Public NotInheritable Class ServiceBehaviorAttribute
Inherits Attribute
Implements IServiceBehavior
Vererbung
ServiceBehaviorAttribute
Attribute
Implementiert

Beispiele

Im folgenden Codebeispiel werden die ServiceBehaviorAttribute-Eigenschaften veranschaulicht. Die BehaviorService-Klasse verwendet das ServiceBehaviorAttribute-Attribut, um Folgendes anzugeben:

  • Das Dienstobjekt wird wiederverwendet, wenn die Transaktion abgeschlossen ist.

  • Es gibt ein Dienstobjekt für jede Sitzung.

  • Der Dienst ist ein Singlethread und unterstützt keine wiedereintrittsfähigen Aufrufe.

Darüber hinaus geben die OperationBehaviorAttribute-Werte auf Vorgangsebene an, dass die TxWork-Methode automatisch in Transaktionsflüsse eingetragen wird oder eine neue Transaktion zum Durchführen der Aufgaben erstellt, und dass für die Transaktion automatisch ein Commit ausgeführt wird, wenn keine nicht behandelte Ausnahme auftritt.

using System;
using System.ServiceModel;
using System.Transactions;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Namespace="http://microsoft.wcf.documentation",
    SessionMode=SessionMode.Required
  )]
  public interface IBehaviorService
  {
    [OperationContract]
    string TxWork(string message);
  }

  // Note: To use the TransactionIsolationLevel property, you
  // must add a reference to the System.Transactions.dll assembly.
  /* The following service implementation:
   *   -- Processes messages on one thread at a time
   *   -- Creates one service object per session
   *   -- Releases the service object when the transaction commits
   */
  [ServiceBehavior(
    ConcurrencyMode=ConcurrencyMode.Single,
    InstanceContextMode=InstanceContextMode.PerSession,
    ReleaseServiceInstanceOnTransactionComplete=true
  )]
  public class BehaviorService : IBehaviorService, IDisposable
  {
    Guid myID;

    public BehaviorService()
    {
      myID = Guid.NewGuid();
      Console.WriteLine(
        "Object "
        + myID.ToString()
        + " created.");
    }

    /*
     * The following operation-level behaviors are specified:
     *   -- The executing transaction is committed when
     *        the operation completes without an
     *        unhandled exception
     *   -- Always executes under a flowed transaction.
     */
    [OperationBehavior(
      TransactionAutoComplete = true,
      TransactionScopeRequired = true
    )]
    [TransactionFlow(TransactionFlowOption.Mandatory)]
    public string TxWork(string message)
    {
      // Do some transactable work.
      Console.WriteLine("TxWork called with: " + message);
      // Display transaction information.

      TransactionInformation info = Transaction.Current.TransactionInformation;
      Console.WriteLine("The distributed tx ID: {0}.", info.DistributedIdentifier);
      Console.WriteLine("The tx status: {0}.", info.Status);
      return String.Format("Hello. This was object {0}.",myID.ToString()) ;
    }

    public void Dispose()
    {
      Console.WriteLine(
        "Service "
        + myID.ToString()
        + " is being recycled."
      );
    }
  }
}
Imports System.ServiceModel
Imports System.Transactions

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Namespace:="http://microsoft.wcf.documentation", SessionMode:=SessionMode.Required)> _
  Public Interface IBehaviorService
    <OperationContract> _
    Function TxWork(ByVal message As String) As String
  End Interface

  ' Note: To use the TransactionIsolationLevel property, you 
  ' must add a reference to the System.Transactions.dll assembly.
'   The following service implementation:
'   *   -- Processes messages on one thread at a time
'   *   -- Creates one service object per session
'   *   -- Releases the service object when the transaction commits
'   
    <ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Single, InstanceContextMode:=InstanceContextMode.PerSession, _
                     ReleaseServiceInstanceOnTransactionComplete:=True)> _
    Public Class BehaviorService
        Implements IBehaviorService, IDisposable
        Private myID As Guid

        Public Sub New()
            myID = Guid.NewGuid()
            Console.WriteLine("Object " & myID.ToString() & " created.")
        End Sub

        '    
        '     * The following operation-level behaviors are specified:
        '     *   -- The executing transaction is committed when
        '     *        the operation completes without an 
        '     *        unhandled exception
        '     *   -- Always executes under a flowed transaction.
        '     
        <OperationBehavior(TransactionAutoComplete:=True, TransactionScopeRequired:=True), TransactionFlow(TransactionFlowOption.Mandatory)> _
        Public Function TxWork(ByVal message As String) As String Implements IBehaviorService.TxWork
            ' Do some transactable work.
            Console.WriteLine("TxWork called with: " & message)
            ' Display transaction information.

            Dim info As TransactionInformation = Transaction.Current.TransactionInformation
            Console.WriteLine("The distributed tx ID: {0}.", info.DistributedIdentifier)
            Console.WriteLine("The tx status: {0}.", info.Status)
            Return String.Format("Hello. This was object {0}.", myID.ToString())
        End Function

        Public Sub Dispose() Implements IDisposable.Dispose
            Console.WriteLine("Service " & myID.ToString() & " is being recycled.")
        End Sub
    End Class
End Namespace

Die zugrunde liegende Bindung muss Transaktionsflüsse unterstützen, damit das folgende Codebeispiel ordnungsgemäß ausgeführt wird. Um Transaktionsflüsse mit WSHttpBinding zu unterstützen, legen Sie zum Beispiel die TransactionFlow-Eigenschaft im Code oder in einer Anwendungskonfigurationsdatei auf true fest. Das folgende Codebeispiel zeigt die Konfigurationsdatei für das vorhergehende Beispiel.

<configuration>
  <system.serviceModel>
    <services>
      <service  
        name="Microsoft.WCF.Documentation.BehaviorService" 
        behaviorConfiguration="metadataAndDebugEnabled"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/SampleService"/>
          </baseAddresses>
        </host>
        <!--
          Note:
            This example code uses the WSHttpBinding to support transactions using the 
            WS-AtomicTransactions (WS-AT) protocol. WSHttpBinding is configured to use the  
            protocol, but the protocol is not enabled on some computers. Use the xws_reg -wsat+ 
            command to enable the WS-AtomicTransactions protocol in the MSDTC service.          
          -->
        <endpoint 
           contract="Microsoft.WCF.Documentation.IBehaviorService"
           binding="wsHttpBinding"
           bindingConfiguration="wsHttpBindingWithTXFlow"
           address="http://localhost:8080/BehaviorService"
          />
        <endpoint 
           contract="Microsoft.WCF.Documentation.IBehaviorService"
           binding="netTcpBinding"
           bindingConfiguration="netTcpBindingWithTXFlow"
           address="net.tcp://localhost:8081/BehaviorService"
          />
        <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metadataAndDebugEnabled">
          <serviceDebug
            includeExceptionDetailInFaults="true"
          />
          <serviceMetadata
            httpGetEnabled="true"
            httpGetUrl=""
          />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <!-- binding configuration - configures a WSHttpBinding to require transaction flow -->
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttpBindingWithTXFlow" transactionFlow="true" />
      </wsHttpBinding>
      <netTcpBinding>
        <binding name="netTcpBindingWithTXFlow" transactionFlow="true" />
      </netTcpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Hinweise

Wendet das ServiceBehaviorAttribute-Attribut auf eine Dienstimplementierung an, um das dienstweite Ausführungsverhalten festzulegen. (Verwenden Sie das -Attribut, um das OperationBehaviorAttribute Ausführungsverhalten auf Methodenebene anzugeben.) Dieses Attribut kann nur auf Dienstimplementierungen angewendet werden. Arbeitsbeispiele finden Sie unter Beispiele für Dienst: Verhalten.

ServiceBehaviorAttribute -Eigenschaften sind ein Windows Communication Foundation (WCF)-Programmiermodellfeature, das allgemeine Features ermöglicht, die Entwickler andernfalls implementieren müssen. Weitere Informationen zu diesen und anderen Verhaltensweisen finden Sie unter Angeben des Dienst-Run-Time-Verhaltens. Weitere Informationen zu den zugrunde liegenden Laufzeiteigenschaften, die einige der folgenden Eigenschaften festgelegt haben, finden Sie unter Erweitern von ServiceHost und Dienstmodellebene.

  • Die AddressFilterMode-Eigenschaft gibt den Filtertyp an, der vom Verteilersystem zum Suchen des Endpunkts, der Anforderungen verarbeitet, verwendet wird.

  • Die AutomaticSessionShutdown-Eigenschaft schließt die Sitzung automatisch, wenn der Kanal geschlossen wird und der Dienst die Verarbeitung aller übrigen Nachrichten abgeschlossen hat.

  • Die ConcurrencyMode-Eigenschaft steuert das interne Threadingmodell und aktiviert so die Unterstützung für wiedereintrittsfähige oder Multithreaddienste.

  • Die ConfigurationName-Eigenschaft wird zum Deklarieren eines Namens zur Verwendung im name-Attribut des <service>-Elements in einer Konfigurationsdatei verwendet.

  • Die IgnoreExtensionDataObject-Eigenschaft ermöglicht der Laufzeit, zusätzliche Serialisierungsinformationen, die zum Verarbeiten der Nachricht nicht erforderlich sind, zu ignorieren.

  • Die IncludeExceptionDetailInFaults-Eigenschaft gibt an, ob nicht behandelte Ausnahmen in einem Dienst als SOAP-Fehler zurückgegeben werden. Dieses dient ausschließlich dem Debugging.

  • Die InstanceContextMode-Eigenschaft gibt an, ob und wann Dienste und deren Dienstobjekte während eines Austauschs mit einem Client wiederverwendet werden.

  • Die MaxItemsInObjectGraph-Eigenschaft, um die Anzahl von Elementen in einem Objektdiagramm, die serialisiert werden, einzuschränken.

  • Die Name-Eigenschaft und Namespace-Eigenschaft steuern den Namen und den Namespace für den WSDL-Ausdruck des Dienstelements.

  • Die ReleaseServiceInstanceOnTransactionComplete-Eigenschaft gibt an, ob das Dienstobjekt bei Abschluss der Transaktion wiederverwendet wird.

  • Die TransactionAutoCompleteOnSessionClose-Eigenschaft gibt an, ob ausstehende Transaktionen abgeschlossen werden, wenn die Sitzung geschlossen wird.

  • Die TransactionIsolationLevel-Eigenschaft gibt die Isolierungsebene der Transaktion an, die vom Vertrag unterstützt wird.

  • Die TransactionTimeout-Eigenschaft gibt den Zeitraum an, in dem eine Transaktion abgeschlossen werden muss, bevor sie abgebrochen wird.

  • Die UseSynchronizationContext-Eigenschaft gibt an, ob eingehende Methodenaufrufe automatisch mit dem Benutzeroberflächenthread synchronisiert werden sollen.

  • Die ValidateMustUnderstand-Eigenschaft informiert das System, ob es prüfen sollte, dass als MustUnderstand markierte SOAP-Header in der Tat verstanden wurden.

Die IncludeExceptionDetailInFaults-Eigenschaft kann auch mit einer Anwendungskonfigurationsdatei festgelegt werden. Ausführliche Informationen finden Sie unter IncludeExceptionDetailInFaults.

Konstruktoren

ServiceBehaviorAttribute()

Initialisiert eine neue Instanz der ServiceBehaviorAttribute-Klasse.

Eigenschaften

AddressFilterMode

Gibt den AddressFilterMode an, der vom Verteiler für die Weiterleitung eingehender Nachrichten an den korrekten Endpunkt verwendet wird, oder legt ihn fest.

AutomaticSessionShutdown

Gibt an, ob eine Sitzung automatisch geschlossen werden soll, wenn ein Client eine Ausgabesitzung schließt.

ConcurrencyMode

Gibt an, ob ein Dienst einen Thread, mehrere Threads oder wiedereintrittsfähige Aufrufe unterstützt, oder legt dies fest.

ConfigurationName

Ruft den Wert ab, mit dem das Dienstelement in einer Anwendungskonfigurationsdatei gesucht wird, oder legt ihn fest.

EnsureOrderedDispatch

Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob die vom Dienst beauftragte Verteilung sichergestellt ist.

IgnoreExtensionDataObject

Ruft einen Wert ab, der angibt, ob unbekannte Serialisierungsdaten gesendet werden sollen, oder legt ihn fest.

IncludeExceptionDetailInFaults

Ruft einen Wert ab bzw. legt ihn fest, der angibt, dass allgemeine nicht behandelte Ausführungsausnahmen in eine FaultException<TDetail> vom Typ ExceptionDetail konvertiert und als Fehlermeldung gesendet werden. Legen Sie dieses Attribut nur während der Entwicklung auf true fest, um Fehler in einem Dienst zu beheben.

InstanceContextMode

Ruft den Wert ab, der angibt, wenn neue Dienstobjekte erstellt werden, oder legt diesen Wert fest.

MaxItemsInObjectGraph

Ruft die maximale Anzahl der in einem serialisierten Objekt zulässigen Elemente ab oder legt sie fest.

Name

Ruft den Wert des Namensattributs im Dienstelement in WSDL (Web Services Description Language) ab oder legt ihn fest.

Namespace

Ruft den Wert des Zielnamespace für den Dienst in WSDL (Web Services Description Language) ab oder legt ihn fest.

ReleaseServiceInstanceOnTransactionComplete

Ruft einen Wert ab, der angibt, ob das Dienstobjekt freigegeben wird, wenn die aktuelle Transaktion abgeschlossen ist, oder legt diesen Wert fest.

TransactionAutoCompleteOnSessionClose

Ruft einen Wert ab, der angibt, ob anstehende Transaktionen abgeschlossen werden, wenn die aktuelle Sitzung ohne Fehler geschlossen wird, oder legt diesen Wert fest.

TransactionIsolationLevel

Gibt die Transaktionsisolierungsebene für neue Transaktionen an, die innerhalb des Diensts erstellt wurden, sowie von einem Client übertragene eingehende Transaktionen.

TransactionTimeout

Ruft den Zeitraum ab oder legt den Zeitraum fest, innerhalb dessen eine Transaktion abgeschlossen werden muss.

TypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.

(Geerbt von Attribute)
UseSynchronizationContext

Ruft einen Wert ab bzw. legt einen Wert fest, der angibt, ob der aktuelle Synchronisierungskontext zum Auswählen des Ausführungsthreads verwendet wird.

ValidateMustUnderstand

Ruft einen Wert ab oder legt diesen fest, der angibt, ob das System oder die Anwendung die Verarbeitung von MustUnderstand-SOAP-Headern erzwingt.

Methoden

Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.

(Geerbt von Attribute)
GetHashCode()

Gibt den Hashcode für diese Instanz zurück.

(Geerbt von Attribute)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
GetWellKnownSingleton()

Ruft ein Objekt ab, das den Dienst implementiert und das als Singletoninstanz des Diensts verwendet wird, oder null, wenn keine Singletoninstanz vorhanden ist.

IsDefaultAttribute()

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.

(Geerbt von Attribute)
Match(Object)

Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht.

(Geerbt von Attribute)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
SetWellKnownSingleton(Object)

Gibt ein Objekt an, das den Dienst implementiert und das als Singletoninstanz des Diensts verwendet wird.

ShouldSerializeConfigurationName()

Gibt einen Wert zurück, der angibt, ob die ConfigurationName-Eigenschaft ihren Standardwert geändert hat und serialisiert werden soll.

ShouldSerializeReleaseServiceInstanceOnTransactionComplete()

Gibt einen Wert zurück, der angibt, ob die ReleaseServiceInstanceOnTransactionComplete-Eigenschaft ihren Standardwert geändert hat und serialisiert werden soll.

ShouldSerializeTransactionAutoCompleteOnSessionClose()

Gibt einen Wert zurück, der angibt, ob die TransactionAutoCompleteOnSessionClose-Eigenschaft ihren Standardwert geändert hat und serialisiert werden soll.

ShouldSerializeTransactionIsolationLevel()

Gibt einen Wert zurück, der angibt, ob die TransactionIsolationLevel-Eigenschaft ihren Standardwert geändert hat und serialisiert werden soll.

ShouldSerializeTransactionTimeout()

Gibt einen Wert zurück, der angibt, ob die TransactionTimeout-Eigenschaft ihren Standardwert geändert hat und serialisiert werden soll.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.

(Geerbt von Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können.

(Geerbt von Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).

(Geerbt von Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.

(Geerbt von Attribute)
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection)

Übergibt benutzerdefinierte Datenobjekte an die Bindungen, die die Verhaltenseigenschaften unterstützen.

IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase)

Passt die Dienstlaufzeit an, um die Verhaltenseigenschaften zu unterstützen.

IServiceBehavior.Validate(ServiceDescription, ServiceHostBase)

Bestätigt, dass die Dienstbeschreibung und der Diensthost in der Lage sind, das Verhalten zu unterstützen.

Gilt für:

Weitere Informationen