默认服务行为
默认示例演示如何配置服务行为设置。 此示例基于入门指南中的示例,它实现 ICalculator
服务协定。 此示例使用 ServiceBehaviorAttribute 和 OperationBehaviorAttribute 属性来显式定义服务行为和操作行为。 你可以在配置文件中配置行为,也可以通过代码强制配置行为(如此示例所示)。
在此示例中,客户端是一个控制台应用程序 (.exe),服务是由 Internet 信息服务 (IIS) 承载的。
注意
本主题的最后介绍了此示例的设置过程和生成说明。
服务类使用 ServiceBehaviorAttribute 和 OperationBehaviorAttribute 来指定行为,如下面的代码示例所示。 指定的所有值均为默认值。
[ServiceBehavior(
AutomaticSessionShutdown=true,
ConcurrencyMode=ConcurrencyMode.Single,
InstanceContextMode=InstanceContextMode.PerSession,
IncludeExceptionDetailInFaults=false,
UseSynchronizationContext=true,
ValidateMustUnderstand=true)]
public class CalculatorService : ICalculator
{
[OperationBehavior(
TransactionAutoComplete=true,
TransactionScopeRequired=false,
Impersonation=ImpersonationOption.NotAllowed)]
public double Add(double n1, double n2)
{
System.Threading.Thread.Sleep(1600);
return n1 + n2;
}
...
}
服务行为是使用 ServiceBehaviorAttribute 属性指定的。 下表描述了其中的一些行为。
服务行为 | 说明 |
---|---|
AutomaticSessionShutdown | 在客户端的请求下自动关闭会话。 |
ConcurrencyMode | 指定每个服务实例的并发模式。 |
InstanceContextMode | 指定实例上下文模式。 |
UseSynchronizationContext | 确定是否使用所提供的同步上下文(如果已设置该上下文)。 在希望控制是否在 Windows 窗体应用程序中使用 WindowsFormsSynchronizationContext 时使用该上下文。 |
IncludeExceptionDetailInFaults | 确定是否要将常规未处理执行异常转换为 Fault<string> 并将其作为错误消息发送。 |
TransactionIsolationLevel | 指定事务的隔离级别。 |
ValidateMustUnderstand | 确定意外消息头是否会导致错误。 |
操作行为是使用 OperationBehaviorAttribute 属性指定的。 下表描述了其中的一些行为。
操作行为 | 说明 |
---|---|
TransactionAutoComplete | 确定服务操作的完成是否提交当前事务。 |
TransactionScopeRequired | 确定服务操作是否在客户端流动的事务中登记。 |
Impersonation | 确定服务操作是否模拟调用方的标识。 |
ReleaseInstanceMode | 确定是否在服务操作调用的开头或结尾处回收服务实例。 |
运行示例时,操作请求和响应将显示在客户端控制台窗口中。 调用之间的延迟是在服务操作中对 System.Threading.Thread.Sleep()
进行调用的结果。 其余的行为示例更详细地说明这些行为。 在客户端窗口中按 Enter 可以关闭客户端。
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
设置、生成和运行示例
若要生成 C# 或 Visual Basic .NET 版本的解决方案,请按照 Building the Windows Communication Foundation Samples中的说明进行操作。
要使用单机配置或跨计算机配置来运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。