【问题标题】:Catching channel faults within service methods?在服务方法中捕获通道故障?
【发布时间】:2014-01-25 00:57:08
【问题描述】:

是否有可能在 WCF 服务方法中捕获客户端的通道故障?目前,我只能通过以下方式捕获通道故障:

OperationContext.Current.Channel.Faulted += new EventHandler(Channel_Faulted);

但是,如果无法将响应传递给客户端,我希望中断服务方法(即抛出异常)。目前,尽管通道出现故障(根据 Faulted 事件),但我的服务继续向客户端发送响应而不抛出任何东西。

附加说明:我正在使用带有 netTcpBinding 的可靠会话,但是当服务发送响应并且没有客户端时,我没有收到异常。

【问题讨论】:

    标签: c# wcf client fault


    【解决方案1】:

    为什么您希望您的服务在没有客户端时抛出异常?

    WCF 本质上是一个消息传递系统,就像我们的邮政系统一样。如果您作为客户给我发信,我(服务)将回复您的地址。我只是假设您仍然住在那里,并且您还活着阅读我的回复。

    即使我在晚间新闻中看到你被卡车碾过(希望不是 ;-)),而我正在写我的回复。为什么我需要大喊“嘿,我无法向那个人发送回复!”?不会有人听我的。而且你已经不在乎了......

    可靠的会话只是在中间添加一个额外的确认步骤。你把信寄给我,我回复说“我收到了你的信,我稍后会回复”。如果您没有收到回复,您只需重新发送原始信件,我会注意到您再次给我发送了相同的信件。所以我再回复一次。回应的故事相同。如果我没有收到您的“我收到您的回复”消息,我会尝试一次又一次地回复。直到我最终放弃……要么是因为我看了晚间新闻,要么是我厌倦了再次写同一封信。但最终的结果是一样的。我还是没有人可以喊,因为你不听我的了……

    双面装订的情况有所不同。然后当服务器收到消息时通信结束。然后角色颠倒过来(服务器变成客户端,客户端变成服务器)。服务器(现在是客户端)在返回通道上向客户端(现在是服务器)发送一个新的通信。而且由于该调用是由方法调用触发的,因此该方法调用将失败并在服务器端出现异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多