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 , ограничивающее количество элементов в графе объектов, сериализованных.
Namespace Свойства Name управляют именем и пространством имен для выражения WSDL элемента службы.
Свойство ReleaseServiceInstanceOnTransactionComplete указывает, перезапускается ли объект службы при завершении транзакции.
Свойство TransactionAutoCompleteOnSessionClose определяет, завершаются ли незавершённые транзакции при завершении сеанса.
Свойство TransactionIsolationLevel задает уровень изоляции транзакций, поддерживаемый контрактом.
Свойство TransactionTimeout указывает период времени, в течение которого транзакция должна завершиться или прервана.
Свойство UseSynchronizationContext указывает, следует ли автоматически синхронизировать вызовы входящего метода с потоком пользовательского интерфейса.
Свойство ValidateMustUnderstand сообщает системе, следует ли подтвердить, что заголовки SOAP помечены как
MustUnderstandпонятные.
Свойство IncludeExceptionDetailInFaults также можно задать с помощью файла конфигурации приложения. Дополнительные сведения см. в IncludeExceptionDetailInFaults.
Конструкторы
| Имя | Описание |
|---|---|
| ServiceBehaviorAttribute() |
Инициализирует новый экземпляр класса ServiceBehaviorAttribute. |
Свойства
| Имя | Описание |
|---|---|
| AddressFilterMode |
Возвращает или задает AddressFilterMode значение, используемое диспетчером для маршрутизации входящих сообщений в правильную конечную точку. |
| AutomaticSessionShutdown |
Указывает, следует ли автоматически закрывать сеанс при закрытии выходного сеанса клиентом. |
| ConcurrencyMode |
Возвращает или задает, поддерживает ли служба один поток, несколько потоков или повторные вызовы. |
| ConfigurationName |
Возвращает или задает значение, используемое для поиска элемента службы в файле конфигурации приложения. |
| EnsureOrderedDispatch |
Возвращает или задает значение, указывающее, гарантируется ли упорядочение службы диспетчера. |
| IgnoreExtensionDataObject |
Возвращает или задает значение, указывающее, следует ли отправлять неизвестные данные сериализации в провод. |
| IncludeExceptionDetailInFaults |
Возвращает или задает значение, указывающее, что общие необработанные исключения выполнения должны быть преобразованы в тип ExceptionDetail и отправлены в FaultException<TDetail> виде сообщения об ошибке. Установите это значение |
| 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) |
Подтверждает, что описание службы и узел службы способны поддерживать поведение. |