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. Класс 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 и передаваться в виде сообщения об ошибке. Задавайте значение |
InstanceContextMode |
Возвращает или задает значение, которое указывает, когда создаются новые объекты службы. |
MaxItemsInObjectGraph |
Возвращает или задает максимальное количество элементов, допустимое в сериализованном объекте. |
Name |
Возвращает или задает значение атрибута имени в элементе службы в языке WSDL. |
Namespace |
Возвращает или задает значение целевого пространства имен для службы в языке WSDL. |
ReleaseServiceInstanceOnTransactionComplete |
Возвращает или задает значение, указывающее, будет ли объект службы выпускаться после успешного выполнения текущей транзакции. |
TransactionAutoCompleteOnSessionClose |
Возвращает или задает значение, которое указывает, завершаются ли автоматически ожидающие транзакции при завершении текущего сеанса без ошибок. |
TransactionIsolationLevel |
Задает уровень изоляции транзакции для новых транзакций, созданных в службе, и входящих транзакций, передаваемых от клиента. |
TransactionTimeout |
Возвращает или задает период времени, в течение которого транзакция должна быть завершена. |
TypeId |
В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute. (Унаследовано от Attribute) |
UseSynchronizationContext |
Возвращает или задает значение, определяющее, следует ли использовать текущий контекст синхронизации для выбора потока исполнения. |
ValidateMustUnderstand |
Возвращает или задает значение, определяющее, кем выполняется принудительная обработка заголовка SOAP |
Методы
Equals(Object) |
Возвращает значение, показывающее, равен ли экземпляр указанному объекту. (Унаследовано от Attribute) |
GetHashCode() |
Возвращает хэш-код данного экземпляра. (Унаследовано от Attribute) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
GetWellKnownSingleton() |
Извлекает объект, реализующий службу и используемый в качестве одноэлементного экземпляра службы, или выводит |
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) |
Подтверждает, что описание службы и ее узел способны поддерживать поведение. |