【问题标题】:Is it possible for one WCF session to throw an exception in another session?一个 WCF 会话是否有可能在另一个会话中引发异常?
【发布时间】:2009-12-11 13:07:53
【问题描述】:

如果管理员登录到我的服务,他可能希望断开满足(或不满足)某些要求的会话,无论是自动的还是手动的。抛出异常似乎是一种简单有效的解决方案,因为所有资源都被释放了。

我可以使用一个本地 bool 字段,如果该字段为真,则会在该用户下次调用任何方法时断开连接,但这似乎不是一个优雅的解决方案。

而且,它不必抛出异常,因为我已经注意到您可以使用 OperationContext.Current.Channel.Close() 或 abort 来禁用对该会话的访问。

在 wcf 中是否有“标准”方式来执行此操作?

【问题讨论】:

  • 要考虑的一件事是,即使他们结束了会话,是什么阻止他们立即开始新的网络请求?
  • 好吧,在断开连接之前,您可能会收到警告,或者您可能会暂时禁止您的用户名,等等...

标签: c# wcf exception session service


【解决方案1】:

在给定的“会话”中,我认为没有一种开箱即用的方式可以对另一个会话(即实例上下文)进行任何操作。

但是,您可以通过将 IChannelInitializer 接口与服务或合同行为结合使用来跟踪连接到您的服务的客户端。这将使您可以访问每个客户端的关联通道,然后您可以根据需要关闭该通道,尽管这不一定会在客户端产生非常有用的故障,因为它看起来像一个通信问题。

如果您可以控制正在访问服务的客户端,则另一种选择是查看回调。通过将上述客户端跟踪与回调结合使用,您实际上可以使客户端更优雅地关闭其自己的频道,并可能通知用户发生了什么。

【讨论】:

  • 是的,忘记那个了,谢谢 :D -- 为了进一步解释解决方案,我刚刚添加了:服务上的 SessionMode=SessionMode.Required 和 [OperationContract(IsTerminating=true)]在回调断开方法上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2014-10-13
  • 1970-01-01
  • 2018-08-21
相关资源
最近更新 更多