ServiceBehaviorAttribute 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
指定服务协定实现的内部执行行为。
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 attribute。) 此属性只能应用于服务实现。 有关工作示例,请参阅 服务:行为示例。
ServiceBehaviorAttribute 属性是 Windows Communication Foundation (WCF) 编程模型功能,可实现开发人员必须实现的常见功能。 有关这些行为和其他行为的详细信息,请参阅 指定服务 Run-Time 行为。 有关以下某些属性设置的基础运行时属性的详细信息,请参阅 扩展 ServiceHost 和服务模型层。
AddressFilterMode 属性指定筛选器的类型,调度程序系统使用该类型的筛选器来查找处理请求的终结点。
AutomaticSessionShutdown 属性会在通道关闭且服务已处理完所有剩余消息时自动关闭会话。
ConcurrencyMode 属性可控制内部线程模型,使系统可以支持可重入或多线程服务。
ConfigurationName 属性用来声明一个名称,以便在配置文件中
name元素的<service>属性中使用。IgnoreExtensionDataObject 属性使系统可以在运行时忽略处理消息时不需要的额外序列化信息。
IncludeExceptionDetailInFaults 属性指定服务中未经处理的异常是否要作为 SOAP 错误返回。 此属性仅用于调试目的。
InstanceContextMode 属性指定在与客户端交换期间是否回收,以及何时回收服务及其服务对象。
MaxItemsInObjectGraph 属性限制对象图中要序列化的项数。
ReleaseServiceInstanceOnTransactionComplete 属性指定当事务完成后是否回收服务对象。
TransactionAutoCompleteOnSessionClose 属性指定会话关闭时是否完成未处理的事务。
TransactionIsolationLevel 属性指定协定支持的事务隔离级别。
TransactionTimeout 属性指定必须完成事务的时间段,超过该时间段,事务将中止。
UseSynchronizationContext 属性指示是否自动同步入站方法调用与用户界面线程。
ValidateMustUnderstand 属性通知系统它是否应确认标记为
MustUnderstand的 SOAP 标头是否确实已被理解。
IncludeExceptionDetailInFaults 属性也可以使用应用程序配置文件进行设置。 有关详细信息,请参阅 IncludeExceptionDetailInFaults。
构造函数
| ServiceBehaviorAttribute() |
初始化 ServiceBehaviorAttribute 类的新实例。 |
属性
| AddressFilterMode |
获取或设置调度程序用于将传入消息路由到正确终结点的 AddressFilterMode。 |
| AutomaticSessionShutdown |
指定在客户端关闭输出会话时是否自动关闭会话。 |
| ConcurrencyMode |
获取或设置一个值,该值指示服务是支持单线程、多线程还是支持可重入调用。 |
| ConfigurationName |
获取或设置用于在应用程序配置文件中定位服务元素的值。 |
| EnsureOrderedDispatch |
获取或设置指示是否确保服务有序调度的值。 |
| IgnoreExtensionDataObject |
获取或设置一个值,该值指定是否将未知序列化数据发送到网络上。 |
| IncludeExceptionDetailInFaults |
获取或设置一个值,该值指定是否要将常规未处理执行异常转换为 FaultException<TDetail> 类型的 ExceptionDetail 并将其作为错误消息发送。 仅在开发阶段将其设置为 |
| InstanceContextMode |
获取或设置指示新服务对象何时创建的值。 |
| MaxItemsInObjectGraph |
获取或设置序列化对象中允许的最大项数。 |
| Name |
获取或设置 Web 服务描述语言 (WSDL) 中服务元素中的名称属性值。 |
| Namespace |
获取或设置 Web 服务描述语言 (WSDL) 中服务的目标命名空间值。 |
| ReleaseServiceInstanceOnTransactionComplete |
获取或设置一个值,该值指定在完成当前事务后是否释放服务对象。 |
| TransactionAutoCompleteOnSessionClose |
获取或设置一个值,该值指定当前会话正常关闭时是否完成挂起事务。 |
| TransactionIsolationLevel |
指定服务中新创建的事务和客户端传入的流事务的事务隔离级别。 |
| TransactionTimeout |
获取或设置事务必须在此期间完成的时间段。 |
| TypeId |
在派生类中实现时,获取此 Attribute 的唯一标识符。 (继承自 Attribute) |
| UseSynchronizationContext |
获取或设置一个值,该值指定是否使用当前同步上下文来选择执行的线程。 |
| ValidateMustUnderstand |
获取或设置一个值,该值指定是由系统还是由应用程序强制执行 SOAP |
方法
显式接口实现
| _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) |
确认服务说明和服务主机是否支持此行为。 |