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) |
确认服务说明和服务主机是否支持此行为。 |