ServiceBehaviorAttribute Klas

Definitie

Hiermee geeft u het interne uitvoeringsgedrag van een implementatie van een servicecontract op.

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
Overname
ServiceBehaviorAttribute
Kenmerken
Implementeringen

Voorbeelden

In het volgende codevoorbeeld ziet u de ServiceBehaviorAttribute eigenschappen. De BehaviorService klasse gebruikt het ServiceBehaviorAttribute kenmerk om aan te geven dat:

  • Het serviceobject wordt gerecycled wanneer de transactie is voltooid.

  • Er is één serviceobject voor elke sessie.

  • De service is één threaded en biedt geen ondersteuning voor nieuwe aanroepen.

Bovendien geven de OperationBehaviorAttribute waarden op bewerkingsniveau aan dat de TxWork methode automatisch wordt opgenomen in gestroomde transacties of dat er een nieuwe transactie wordt gemaakt om het werk uit te voeren en dat de transactie automatisch wordt doorgevoerd als er geen onverwerkte uitzondering optreedt.

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

De onderliggende binding moet stroomtransacties ondersteunen voor het volgende codevoorbeeld om correct te kunnen worden uitgevoerd. Als u stroomtransacties wilt ondersteunen met behulp van bijvoorbeeld de WSHttpBindingTransactionFlow eigenschap true in code of in een toepassingsconfiguratiebestand. In het volgende codevoorbeeld ziet u het configuratiebestand voor het voorgaande voorbeeld.

<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>

Opmerkingen

Pas het ServiceBehaviorAttribute kenmerk toe op een service-implementatie om het uitvoeringsgedrag voor de hele service op te geven. (Als u uitvoeringsgedrag op methodeniveau wilt opgeven, gebruikt u het OperationBehaviorAttribute kenmerk.) Dit kenmerk kan alleen worden toegepast op service-implementaties. Zie de service: gedragsvoorbeelden voor werkvoorbeelden.

ServiceBehaviorAttribute eigenschappen zijn een functie voor het programmeermodel van Windows Communication Foundation (WCF) die algemene functies mogelijk maakt die ontwikkelaars anders moeten implementeren. Zie Specifying Service Run-Time Behavior (Service opgeven Run-Time Gedrag) voor meer informatie over deze en andere gedragingen. Zie Uitbreiden van ServiceHost en de servicemodellaag voor meer informatie over de onderliggende runtime-eigenschappen die sommige van de volgende eigenschappen zijn ingesteld.

  • De AddressFilterMode eigenschap geeft het type filter op dat het dispatchersysteem gebruikt om het eindpunt te vinden dat aanvragen verwerkt.

  • De AutomaticSessionShutdown eigenschap sluit de sessie automatisch wanneer het kanaal wordt gesloten en de service klaar is met het verwerken van alle resterende berichten.

  • De ConcurrencyMode eigenschap bepaalt het interne threadingmodel, waardoor ondersteuning wordt ingeschakeld voor reentrant- of multithreaded services.

  • De ConfigurationName eigenschap wordt gebruikt om een naam te declareren voor gebruik in het name kenmerk van het <service> element in een configuratiebestand.

  • Met IgnoreExtensionDataObject de eigenschap kan de uitvoeringstijd extra serialisatie-informatie negeren die niet vereist is om het bericht te verwerken.

  • De IncludeExceptionDetailInFaults eigenschap geeft aan of niet-verwerkte uitzonderingen in een service worden geretourneerd als SOAP-fouten. Dit is alleen voor foutopsporingsdoeleinden.

  • De InstanceContextMode eigenschap geeft aan of en wanneer services en hun serviceobjecten moeten worden gerecycled tijdens een uitwisseling met een klant.

  • De MaxItemsInObjectGraph eigenschap die moet worden beperkt voor het aantal items in een objectgrafiek dat wordt geserialiseerd.

  • De Name en Namespace eigenschappen bepalen de naam en naamruimte voor de WSDL-expressie van het service-element.

  • De ReleaseServiceInstanceOnTransactionComplete eigenschap geeft aan of het serviceobject wordt gerecycled wanneer een transactie is voltooid.

  • De TransactionAutoCompleteOnSessionClose eigenschap geeft aan of openstaande transacties worden voltooid wanneer de sessie wordt gesloten.

  • De TransactionIsolationLevel eigenschap geeft het isolatieniveau voor transacties op dat door het contract wordt ondersteund.

  • De TransactionTimeout eigenschap geeft de periode aan waarin een transactie moet worden voltooid of wordt afgebroken.

  • De UseSynchronizationContext eigenschap geeft aan of binnenkomende methodeaanroepen automatisch moeten worden gesynchroniseerd met de thread van de gebruikersinterface.

  • De ValidateMustUnderstand eigenschap informeert het systeem of het moet bevestigen dat SOAP-headers die zijn gemarkeerd als MustUnderstand die in feite zijn begrepen.

De IncludeExceptionDetailInFaults eigenschap kan ook worden ingesteld met behulp van een toepassingsconfiguratiebestand. Zie IncludeExceptionDetailInFaultsvoor meer informatie.

Constructors

Name Description
ServiceBehaviorAttribute()

Initialiseert een nieuw exemplaar van de ServiceBehaviorAttribute klasse.

Eigenschappen

Name Description
AddressFilterMode

Hiermee haalt u de AddressFilterMode gegevens op die door de dispatcher worden gebruikt om binnenkomende berichten naar het juiste eindpunt te routeren.

AutomaticSessionShutdown

Hiermee geeft u op of een sessie automatisch moet worden gesloten wanneer een client een uitvoersessie sluit.

ConcurrencyMode

Hiermee wordt opgehaald of ingesteld of een service één thread, meerdere threads of nieuwe aanroepen ondersteunt.

ConfigurationName

Hiermee haalt u de waarde op die wordt gebruikt om het service-element in een toepassingsconfiguratiebestand te vinden of stelt u deze in.

EnsureOrderedDispatch

Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of de bestelde verzending van de service is gegarandeerd.

IgnoreExtensionDataObject

Hiermee wordt een waarde opgehaald of ingesteld waarmee wordt aangegeven of onbekende serialisatiegegevens naar de kabel moeten worden verzonden.

IncludeExceptionDetailInFaults

Hiermee wordt een waarde opgehaald of ingesteld die aangeeft dat algemene niet-verwerkte uitvoeringsonderzondering moet worden geconverteerd naar een FaultException<TDetail> type ExceptionDetail en als een foutbericht moet worden verzonden. Stel deze optie alleen in op true tijdens de ontwikkeling om problemen met een service op te lossen.

InstanceContextMode

Hiermee wordt de waarde opgehaald of ingesteld die aangeeft wanneer nieuwe serviceobjecten worden gemaakt.

MaxItemsInObjectGraph

Hiermee wordt het maximum aantal items opgehaald of ingesteld dat is toegestaan in een geserialiseerd object.

Name

Hiermee haalt u de waarde van het naamkenmerk op in het service-element in WSDL (Web Services Description Language).

Namespace

Hiermee wordt de waarde van de doelnaamruimte voor de service opgehaald of ingesteld in WSDL (Web Services Description Language).

ReleaseServiceInstanceOnTransactionComplete

Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of het serviceobject wordt vrijgegeven wanneer de huidige transactie is voltooid.

TransactionAutoCompleteOnSessionClose

Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of wachtende transacties worden voltooid wanneer de huidige sessie zonder fouten wordt gesloten.

TransactionIsolationLevel

Hiermee geeft u het niveau van transactieisolatie op voor nieuwe transacties die in de service zijn gemaakt en binnenkomende transacties die zijn gestroomd vanaf een client.

TransactionTimeout

Hiermee haalt u de periode op waarin een transactie moet worden voltooid of stelt u deze in.

TypeId

Wanneer deze wordt geïmplementeerd in een afgeleide klasse, krijgt u Attributehiervoor een unieke id.

(Overgenomen van Attribute)
UseSynchronizationContext

Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of de huidige synchronisatiecontext moet worden gebruikt om de thread van de uitvoering te kiezen.

ValidateMustUnderstand

Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of het systeem of de toepassing SOAP-headerverwerking MustUnderstand afdwingt.

Methoden

Name Description
Equals(Object)

Retourneert een waarde die aangeeft of dit exemplaar gelijk is aan een opgegeven object.

(Overgenomen van Attribute)
GetHashCode()

Retourneert de hash-code voor dit exemplaar.

(Overgenomen van Attribute)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
GetWellKnownSingleton()

Hiermee wordt een object opgehaald dat de service implementeert en die wordt gebruikt als het singleton-exemplaar van de service, of null als er geen singleton-exemplaar is.

IsDefaultAttribute()

Wanneer deze wordt overschreven in een afgeleide klasse, geeft u aan of de waarde van dit exemplaar de standaardwaarde is voor de afgeleide klasse.

(Overgenomen van Attribute)
Match(Object)

Wanneer deze wordt overschreven in een afgeleide klasse, wordt een waarde geretourneerd die aangeeft of dit exemplaar gelijk is aan een opgegeven object.

(Overgenomen van Attribute)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
SetWellKnownSingleton(Object)

Hiermee geeft u een object op dat de service implementeert en die wordt gebruikt als het singleton-exemplaar van de service.

ShouldSerializeConfigurationName()

Retourneert een waarde die aangeeft of de eigenschap is gewijzigd van de ConfigurationName standaardwaarde en moet worden geserialiseerd.

ShouldSerializeReleaseServiceInstanceOnTransactionComplete()

Retourneert een waarde die aangeeft of de eigenschap is gewijzigd van de ReleaseServiceInstanceOnTransactionComplete standaardwaarde en moet worden geserialiseerd.

ShouldSerializeTransactionAutoCompleteOnSessionClose()

Retourneert een waarde die aangeeft of de eigenschap is gewijzigd van de TransactionAutoCompleteOnSessionClose standaardwaarde en moet worden geserialiseerd.

ShouldSerializeTransactionIsolationLevel()

Retourneert een waarde die aangeeft of de eigenschap is gewijzigd van de TransactionIsolationLevel standaardwaarde en moet worden geserialiseerd.

ShouldSerializeTransactionTimeout()

Retourneert een waarde die aangeeft of de eigenschap is gewijzigd van de TransactionTimeout standaardwaarde en moet worden geserialiseerd.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Expliciete interface-implementaties

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

Hiermee wordt een set namen toegewezen aan een bijbehorende set verzend-id's.

(Overgenomen van Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Hiermee haalt u de typegegevens voor een object op, die kan worden gebruikt om de typegegevens voor een interface op te halen.

(Overgenomen van Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Hiermee wordt het aantal type-informatieinterfaces opgehaald dat een object biedt (0 of 1).

(Overgenomen van Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Biedt toegang tot eigenschappen en methoden die door een object worden weergegeven.

(Overgenomen van Attribute)
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection)

Hiermee worden aangepaste gegevensobjecten doorgegeven aan de bindingen die ondersteuning bieden voor de gedragseigenschappen.

IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase)

Hiermee past u de uitvoeringstijd van de service aan om de gedragseigenschappen te ondersteunen.

IServiceBehavior.Validate(ServiceDescription, ServiceHostBase)

Bevestigt dat de servicebeschrijving en de servicehost het gedrag kunnen ondersteunen.

Van toepassing op

Zie ook