Поделиться через


ServiceBehaviorAttribute Класс

Определение

Задает поведение внутреннего выполнения реализации контракта службы.

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
Наследование
ServiceBehaviorAttribute
Атрибуты
Реализации

Примеры

В следующем примере кода показаны свойства ServiceBehaviorAttribute. Класс BehaviorService использует атрибут ServiceBehaviorAttribute, чтобы указать следующее.

  • Объект службы удаляется по завершении транзакции.

  • Для каждого сеанса существует один объект службы.

  • Служба является однопоточной и не поддерживает повторные входящие вызовы.

Более того, на уровне операций значения OperationBehaviorAttribute указывают, что метод TxWork автоматически выполняет зачисление в поток транзакций или создает для этого новую транзакцию; транзакция выполняется автоматически, если не выдается необработанное исключение.

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

Чтобы следующий пример кода выполнялся правильно, базовая привязка должна поддерживать поток транзакций. Для поддержки потока транзакций с использованием WSHttpBinding можно, например, задать для свойства TransactionFlow значение true в коде или в файле конфигурации приложения. В следующем примере кода показан файл конфигурации для предыдущего примера.

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

Комментарии

Примените атрибут ServiceBehaviorAttribute к реализации службы, чтобы задать поведение выполнения в масштабе всей службы. (Чтобы указать поведение выполнения на уровне метода, используйте OperationBehaviorAttribute атрибут .) Этот атрибут может применяться только к реализациям служб. Рабочие примеры см. в разделе Службы: примеры поведения.

ServiceBehaviorAttribute свойства — это компонент модели программирования Windows Communication Foundation (WCF), который позволяет реализовать общие функции, которые разработчики в противном случае должны были реализовать. Дополнительные сведения об этих и других поведениях см. в разделе Указание поведения Run-Time службы. Дополнительные сведения о базовых свойствах среды выполнения, которые задают некоторые из следующих свойств, см. в разделе Расширение ServiceHost и уровня модели службы.

  • Свойство AddressFilterMode задает тип фильтра, который использует система диспетчера для определения расположения конечной точки, обрабатывающей запросы.

  • Свойство AutomaticSessionShutdown автоматически завершает сеанс после закрытия канала и завершения обработки остающихся сообщений службой.

  • Свойство ConcurrencyMode контролирует внутреннюю модель потоков, обеспечивая поддержку служб с повторными входящими вызовами или многопоточных служб.

  • Свойство ConfigurationName используется для объявления имени, используемого в атрибуте name элемента <service> в файле конфигурации.

  • Свойство IgnoreExtensionDataObject позволяет среде выполнения игнорировать дополнительную информацию о сериализации, которая не требуется для обработки сообщения.

  • Свойство IncludeExceptionDetailInFaults определяет, возвращаются ли необработанные исключения в службе в качестве ошибок SOAP. Это предназначено только для отладки.

  • Свойство InstanceContextMode задает, будут ли и, если будут, когда службы и объекты служб удаляться во время обмена с клиентом.

  • Свойство MaxItemsInObjectGraph ограничивает число сериализуемых элементов в графе объекта.

  • Свойства Name и Namespace контролируют имя и пространство имен для выражения WSDL элемента службы.

  • Свойство ReleaseServiceInstanceOnTransactionComplete определяет, удаляется ли объект службы по завершении транзакции.

  • Свойство TransactionAutoCompleteOnSessionClose определяет, завершаются ли ожидающие обработки транзакции при завершении сеанса.

  • Свойство TransactionIsolationLevel задает уровень изоляции транзакций, поддерживаемый контрактом.

  • Свойство TransactionTimeout задает период времени, в течение которого транзакция должна быть завершена или прервана.

  • Свойство UseSynchronizationContext определяет, следует ли автоматически синхронизировать входящие вызовы метода с потоком пользовательского интерфейса.

  • Свойство ValidateMustUnderstand сообщает системе, должна ли она подтверждать, что заголовки SOAP, отмеченные как MustUnderstand, фактически были поняты.

Свойство IncludeExceptionDetailInFaults также можно задать с помощью файла конфигурации приложения. Дополнительные сведения см. в разделе IncludeExceptionDetailInFaults.

Конструкторы

ServiceBehaviorAttribute()

Инициализирует новый экземпляр класса ServiceBehaviorAttribute.

Свойства

AddressFilterMode

Возвращает или задает AddressFilterMode, используемый диспетчером для маршрутизации входящих сообщений на правильную конечную точку.

AutomaticSessionShutdown

Указывает, следует ли автоматически завершать сеанс, когда клиент закрывает выходной сеанс.

ConcurrencyMode

Возвращает или задает поддержку службой одного потока, нескольких потоков или повторных входящих вызовов.

ConfigurationName

Возвращает или задает значение, используемое для поиска элемента службы в файле конфигурации приложения.

EnsureOrderedDispatch

Получает или задает значение, указывающее, обеспечивается ли отправка с упорядочением службой.

IgnoreExtensionDataObject

Возвращает или задает значение, которое указывает, требуется ли передавать по линии связи неизвестные данные сериализации.

IncludeExceptionDetailInFaults

Возвращает или задает значение, указывающее, что общие необработанные исключения выполнения должны преобразовываться в исключения FaultException<TDetail> типа ExceptionDetail и передаваться в виде сообщения об ошибке. Задавайте значение true только во время разработки для устранения неполадок службы.

InstanceContextMode

Возвращает или задает значение, которое указывает, когда создаются новые объекты службы.

MaxItemsInObjectGraph

Возвращает или задает максимальное количество элементов, допустимое в сериализованном объекте.

Name

Возвращает или задает значение атрибута имени в элементе службы в языке WSDL.

Namespace

Возвращает или задает значение целевого пространства имен для службы в языке WSDL.

ReleaseServiceInstanceOnTransactionComplete

Возвращает или задает значение, указывающее, будет ли объект службы выпускаться после успешного выполнения текущей транзакции.

TransactionAutoCompleteOnSessionClose

Возвращает или задает значение, которое указывает, завершаются ли автоматически ожидающие транзакции при завершении текущего сеанса без ошибок.

TransactionIsolationLevel

Задает уровень изоляции транзакции для новых транзакций, созданных в службе, и входящих транзакций, передаваемых от клиента.

TransactionTimeout

Возвращает или задает период времени, в течение которого транзакция должна быть завершена.

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.

(Унаследовано от Attribute)
UseSynchronizationContext

Возвращает или задает значение, определяющее, следует ли использовать текущий контекст синхронизации для выбора потока исполнения.

ValidateMustUnderstand

Возвращает или задает значение, определяющее, кем выполняется принудительная обработка заголовка SOAP MustUnderstand: системой или приложением.

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.

(Унаследовано от Attribute)
GetHashCode()

Возвращает хэш-код данного экземпляра.

(Унаследовано от Attribute)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
GetWellKnownSingleton()

Извлекает объект, реализующий службу и используемый в качестве одноэлементного экземпляра службы, или выводит null, если одноэлементный экземпляр отсутствует.

IsDefaultAttribute()

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.

(Унаследовано от Attribute)
Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.

(Унаследовано от Attribute)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
SetWellKnownSingleton(Object)

Задает объект, реализующий службу и используемый в качестве одноэлементного экземпляра службы.

ShouldSerializeConfigurationName()

Возвращает значение, указывающее, изменилось ли значение свойства ConfigurationName относительно значения по умолчанию и нужно ли его сериализовать.

ShouldSerializeReleaseServiceInstanceOnTransactionComplete()

Возвращает значение, указывающее, изменилось ли значение свойства ReleaseServiceInstanceOnTransactionComplete относительно значения по умолчанию и нужно ли его сериализовать.

ShouldSerializeTransactionAutoCompleteOnSessionClose()

Возвращает значение, указывающее, изменилось ли значение свойства TransactionAutoCompleteOnSessionClose относительно значения по умолчанию и нужно ли его сериализовать.

ShouldSerializeTransactionIsolationLevel()

Возвращает значение, указывающее, изменилось ли значение свойства TransactionIsolationLevel относительно значения по умолчанию и нужно ли его сериализовать.

ShouldSerializeTransactionTimeout()

Возвращает значение, указывающее, изменилось ли значение свойства TransactionTimeout относительно значения по умолчанию и нужно ли его сериализовать.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

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

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

(Унаследовано от Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.

(Унаследовано от Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

(Унаследовано от Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.

(Унаследовано от Attribute)
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection)

Передает пользовательские объекты данных в привязки, поддерживающие свойства поведения.

IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase)

Настраивает среду выполнения службы для поддержки свойств поведения.

IServiceBehavior.Validate(ServiceDescription, ServiceHostBase)

Подтверждает, что описание службы и ее узел способны поддерживать поведение.

Применяется к

См. также раздел