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



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

来捕获通道故障
OperationContext.Current.Channel.Faulted += new EventHandler(Channel_Faulted);

但是,如果无法将响应交付给客户端,我希望将服务方法中断(即提出异常)。目前,我的服务继续向客户发送回复,但未抛出任何东西,尽管该频道有故障(根据故障事件)。

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

当没有客户端时,为什么要抛出异常?

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

即使我在晚间新闻中看到您在写作回复时被卡车撞了(希望不要;-))。为什么我需要大喊"嘿,我无法将我的回复发送给那个家伙!"?没有人听我说。而且您不在乎...

可靠的会话只需在两者之间添加额外的确认步骤即可。您给我发了一封信,我回答说:"我收到了你的来信,稍后我会回复"。如果您没有得到该答复,您只需重新发送原始信,我会注意到您再次给我发了同一封信。所以我会再次回应。回应的故事相同。如果我没有收到您的"我得到您的回复"消息,我将尝试一次又一次地回应。直到我终于放弃...要么是因为我看了晚间新闻,要么我对再次写同一封信感到厌倦。但是最终结果是相同的。我仍然没有人大喊大叫,因为你不再听我了...

在双工绑定中,故事有所不同。然后,当服务器获取消息时,通信结束。然后角色逆转(服务器成为客户端,客户端成为服务器)。服务器(现在的客户端)将返回通道上的新通信发送到客户端(现在的服务器)。而且由于该调用是由方法调用触发的,因此该方法调用将失败,而在服务器端例外。

最新更新