在会话合同中使用单向操作被认为是一个糟糕的设计?

时间:2011-02-03 18:51:23

标签: wcf web-services design-patterns

我已经读过如果使用 SessionMode.PerSession 实例化,不应该在会话合同中使用单向操作,但使用sessionful的单向操作并不是一个糟糕的设计当 SessionMode 是每次调用或每单独一次时的合同。

为什么单向操作不应该用于每个会话的任何想法,而它们可以与每个呼叫和每个单独使用?

谢谢

1 个答案:

答案 0 :(得分:1)

如果您使用单向操作,则不知道它是否会导致服务异常。服务上未处理的异常始终会使通道出现故障。如果InstanceContextMode设置为PerSession,则它会阻止会话通道并且它会处理服务实例。由于单向自然客户端不会知道它,并且下一次从同一客户端代理调用服务将以异常结束(通道出现故障...)。客户只能在代理上拨打Abort,但他不会知道。启用会话的IMO Single实例化将表现得非常相似,除非它不会处置服务实例。

PerCall实例化不会发生这种情况,因为每个调用实例使用通道堆栈进行单个请求处理。正如评论中所指出的,它也会在PerCall实例化中发生,因为故障会话频道