Udostępnij za pośrednictwem


ServiceBehaviorAttribute Klasa

Definicja

Określa zachowanie wewnętrzne wykonywania implementacji kontraktu usługi.

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
Dziedziczenie
ServiceBehaviorAttribute
Atrybuty
Implementuje

Przykłady

Poniższy przykład kodu przedstawia ServiceBehaviorAttribute właściwości. Klasa BehaviorService używa atrybutu ServiceBehaviorAttribute , aby wskazać, że:

  • Obiekt usługi jest przetwarzany po zakończeniu transakcji.

  • Dla każdej sesji istnieje jeden obiekt usługi.

  • Usługa jest jednowątkowa i nie obsługuje wywołań reentrant.

Ponadto na poziomie operacji wartości wskazują, OperationBehaviorAttribute że TxWork metoda automatycznie zaciąga się do przepływanych transakcji lub tworzy nową transakcję do wykonania pracy, a transakcja jest zatwierdzana automatycznie, jeśli nieobsługiwany wyjątek nie występuje.

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

Powiązanie bazowe musi obsługiwać przepływane transakcje dla następującego przykładu kodu w celu prawidłowego wykonania. Aby obsługiwać przepływy transakcji przy użyciu WSHttpBindingelementu , na przykład ustaw TransactionFlow właściwość na true wartość w kodzie lub w pliku konfiguracji aplikacji. Poniższy przykład kodu przedstawia plik konfiguracji dla poprzedniego przykładu.

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

Uwagi

ServiceBehaviorAttribute Zastosuj atrybut do implementacji usługi, aby określić zachowanie wykonywania w całej usłudze. (Aby określić zachowanie wykonywania na poziomie metody, użyj atrybutu OperationBehaviorAttribute ). Ten atrybut można zastosować tylko do implementacji usługi. Aby zapoznać się z przykładami roboczymi, zobacz Service: Behaviors Samples (Przykładowe zachowania: usługa: zachowania).

ServiceBehaviorAttribute właściwości to funkcja modelu programowania Windows Communication Foundation (WCF), która umożliwia implementację typowych funkcji, które deweloperzy w przeciwnym razie muszą zaimplementować. Aby uzyskać więcej informacji na temat tych i innych zachowań, zobacz Określanie zachowania usługi Run-Time. Aby uzyskać więcej informacji o podstawowych właściwościach środowiska uruchomieniowego ustawionych przez niektóre z następujących właściwości, zobacz Extending ServiceHost and the Service Model Layer (Rozszerzanie elementu ServiceHost i warstwy modelu usługi).

  • Właściwość AddressFilterMode określa typ filtru używanego przez system dyspozytora do lokalizowania punktu końcowego obsługującego żądania.

  • Właściwość AutomaticSessionShutdown automatycznie zamyka sesję po zamknięciu kanału, a usługa zakończyła przetwarzanie pozostałych komunikatów.

  • Właściwość ConcurrencyMode steruje wewnętrznym modelem wątków, umożliwiając obsługę usług wielowątkowych lub wielowątowych.

  • Właściwość ConfigurationName służy do deklarowania nazwy do użycia w atrybucie name<service> elementu w pliku konfiguracji.

  • Właściwość IgnoreExtensionDataObject umożliwia czas wykonywania ignorowanie dodatkowych informacji o serializacji, które nie są wymagane do przetworzenia komunikatu.

  • Właściwość IncludeExceptionDetailInFaults określa, czy nieobsługiwane wyjątki w usłudze są zwracane jako błędy protokołu SOAP. Jest to tylko do celów debugowania.

  • Właściwość InstanceContextMode określa, czy usługi i ich obiekty usługi mają być poddawane recyklingu podczas wymiany z klientem.

  • Właściwość ograniczająca MaxItemsInObjectGraph liczbę elementów na grafie obiektu, które są serializowane.

  • Właściwości Name i Namespace kontrolują nazwę i przestrzeń nazw dla wyrażenia WSDL elementu usługi.

  • Właściwość ReleaseServiceInstanceOnTransactionComplete określa, czy obiekt usługi jest poddawany recyklingu po zakończeniu transakcji.

  • Właściwość TransactionAutoCompleteOnSessionClose określa, czy zaległe transakcje są wykonywane po zamknięciu sesji.

  • Właściwość TransactionIsolationLevel określa poziom izolacji transakcji, który obsługuje kontrakt.

  • Właściwość TransactionTimeout określa okres, w którym transakcja musi zostać zakończona lub przerwana.

  • Właściwość UseSynchronizationContext wskazuje, czy automatycznie synchronizować wywołania metody przychodzącej z wątkiem interfejsu użytkownika.

  • Właściwość ValidateMustUnderstand informuje system, czy powinien potwierdzić, że nagłówki protokołu SOAP oznaczone jako MustUnderstand zostały w rzeczywistości zrozumiałe.

Właściwość IncludeExceptionDetailInFaults można również ustawić przy użyciu pliku konfiguracji aplikacji. Aby uzyskać szczegółowe informacje, zobacz IncludeExceptionDetailInFaults.

Konstruktory

ServiceBehaviorAttribute()

Inicjuje nowe wystąpienie klasy ServiceBehaviorAttribute.

Właściwości

AddressFilterMode

Pobiera lub ustawia element AddressFilterMode używany przez dyspozytor do kierowania komunikatów przychodzących do poprawnego punktu końcowego.

AutomaticSessionShutdown

Określa, czy program ma automatycznie zamknąć sesję, gdy klient zamknie sesję wyjściową.

ConcurrencyMode

Pobiera lub ustawia, czy usługa obsługuje jeden wątek, wiele wątków lub wywołań powtarzających.

ConfigurationName

Pobiera lub ustawia wartość użytą do zlokalizowania elementu usługi w pliku konfiguracji aplikacji.

EnsureOrderedDispatch

Pobiera lub ustawia wartość wskazującą, czy usługa zamówiona wysyłka jest zapewniona.

IgnoreExtensionDataObject

Pobiera lub ustawia wartość określającą, czy wysyłać nieznane dane serializacji do przewodu.

IncludeExceptionDetailInFaults

Pobiera lub ustawia wartość określającą, że ogólne nieobsługiwane wyjątki wykonywania mają być konwertowane na FaultException<TDetail> typ ExceptionDetail i wysyłane jako komunikat o błędzie. Ustaw tę wartość true na wartość tylko podczas programowania, aby rozwiązać problemy z usługą.

InstanceContextMode

Pobiera lub ustawia wartość, która wskazuje, kiedy są tworzone nowe obiekty usługi.

MaxItemsInObjectGraph

Pobiera lub ustawia maksymalną liczbę elementów dozwolonych w serializowanym obiekcie.

Name

Pobiera lub ustawia wartość atrybutu name w elemecie usługi w języku WSDL (Web Services Description Language).

Namespace

Pobiera lub ustawia wartość docelowej przestrzeni nazw dla usługi w języku WSDL (Web Services Description Language).

ReleaseServiceInstanceOnTransactionComplete

Pobiera lub ustawia wartość określającą, czy obiekt usługi jest zwalniany po zakończeniu bieżącej transakcji.

TransactionAutoCompleteOnSessionClose

Pobiera lub ustawia wartość określającą, czy oczekujące transakcje są wykonywane po zamknięciu bieżącej sesji bez błędu.

TransactionIsolationLevel

Określa poziom izolacji transakcji dla nowych transakcji utworzonych wewnątrz usługi i transakcji przychodzących przepływanych z klienta.

TransactionTimeout

Pobiera lub ustawia okres, w którym transakcja musi zostać ukończona.

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attributeelementu .

(Odziedziczone po Attribute)
UseSynchronizationContext

Pobiera lub ustawia wartość, która określa, czy używać bieżącego kontekstu synchronizacji do wybrania wątku wykonywania.

ValidateMustUnderstand

Pobiera lub ustawia wartość, która określa, czy system lub aplikacja wymusza przetwarzanie nagłówka protokołu SOAP MustUnderstand .

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca wartość skrótu dla tego wystąpienia.

(Odziedziczone po Attribute)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
GetWellKnownSingleton()

Pobiera obiekt, który implementuje usługę i jest używany jako pojedyncze wystąpienie usługi, lub null jeśli nie ma pojedynczego wystąpienia.

IsDefaultAttribute()

Podczas zastępowania w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla klasy pochodnej.

(Odziedziczone po Attribute)
Match(Object)

Po przesłonięciu w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi.

(Odziedziczone po Attribute)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
SetWellKnownSingleton(Object)

Określa obiekt, który implementuje usługę i który jest używany jako pojedyncze wystąpienie usługi.

ShouldSerializeConfigurationName()

Zwraca wartość wskazującą, czy ConfigurationName właściwość zmieniła się z wartości domyślnej i powinna być serializowana.

ShouldSerializeReleaseServiceInstanceOnTransactionComplete()

Zwraca wartość wskazującą, czy ReleaseServiceInstanceOnTransactionComplete właściwość zmieniła się z wartości domyślnej i powinna być serializowana.

ShouldSerializeTransactionAutoCompleteOnSessionClose()

Zwraca wartość wskazującą, czy TransactionAutoCompleteOnSessionClose właściwość zmieniła się z wartości domyślnej i powinna być serializowana.

ShouldSerializeTransactionIsolationLevel()

Zwraca wartość wskazującą, czy TransactionIsolationLevel właściwość zmieniła się z wartości domyślnej i powinna być serializowana.

ShouldSerializeTransactionTimeout()

Zwraca wartość wskazującą, czy TransactionTimeout właściwość zmieniła się z wartości domyślnej i powinna być serializowana.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

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

Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Pobiera informacje o typie dla obiektu, który może służyć do pobierania informacji o typie dla interfejsu.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1).

(Odziedziczone po Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt.

(Odziedziczone po Attribute)
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection)

Przekazuje niestandardowe obiekty danych do powiązań, które obsługują właściwości zachowania.

IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase)

Dostosowuje czas wykonywania usługi do obsługi właściwości zachowania.

IServiceBehavior.Validate(ServiceDescription, ServiceHostBase)

Potwierdza, że opis usługi i host usługi mogą obsługiwać zachowanie.

Dotyczy

Zobacz też