在服务方法中捕获通道故障?

时间:2014-01-25 00:57:08

标签: c# wcf client fault

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

即使我在晚间新闻中看到你被卡车碾过(我希望不要;-)),而我正在写我的回复。为什么我要喊'嘿我不能把答案发给那个人!'?没有人会听我的。而且你不在乎......

可靠会话只是在两者之间添加额外的确认步骤。你把这封信寄给我,我回答说'我收到了你的来信,我稍后会回复'。如果你没有收到回复,你只需要重新发送原始信件,我会注意到你再次给我发了同样的信。所以我会再次回复。同样的回应故事。如果我没有收到你的“我得到你的回复”的消息,我会再次尝试回复,并再次回复。直到我最终放弃...要么是因为我看了晚报,要么我已经厌倦了再次写同一封信。但最终结果是一样的。我还没有人大喊大叫,因为你不再听我了......

双面绑定的故事有所不同。然后,当服务器获得消息时,通信结束。然后角色反转(服务器变为客户端,客户端变为服务器)。服务器(现在是客户端)在返回通道上将新通信发送到客户端(现在是服务器)。并且因为该调用是由方法调用触发的,所以该方法调用将失败,并在服务器端出现异常。