2009-08-16 85 views
1

使用WCF的系统中CommunicationExceptions的处理方式是什么?我有一个客户端通过使用SOAP的WCF与服务器通信 - 所有的异步通信。偶尔我会得到一个抛出在我脸上的CommunicationException - 在这种情况发生的时间和时间上没有看到任何可重复的模式。WCF - “CommunicationException未被用户代码处理”

但是;我能够继续运行程序,因为这只是第一次机会(?)例外。因此,我认为我不必担心这一点,并且在幕后处理?但是我仍然很担心,如果有人能够在这方面给我启发,那将会很好。我应该尝试通过WCF调用CommunicationException的每个地方吗?

+1

你在调试器中看到这个异常吗?那么不要担心 - 这是第一次偶然的例外,并且可能会被处理。 – 2009-08-16 20:02:13

+0

是 - 在调试器中。是的 - 似乎是第一次机会的例外,因为我可以继续运行程序。所以;那么不用担心?告诉VisualStudio停止打扰我这些例外..? – stiank81 2009-08-16 20:04:06

回答

2

CommunicationException是所有WCF相关问题的基本类型和案件的大量在客户端会出现:

  • 当你的客户例如请求是不具备的URL
  • 当你的服务器太忙,不能处理更多的请求和拒绝的请求
  • 出问题的时候客户端和服务器之间的网络上(连接中断等)

如果您经常弹出这些对话框,您需要更仔细地检查它们是否真的是CommunicationException或某些派生类型(FaultException等等)。

A FaultException将表明服务器上的某些内容出错了 - 如果服务器收到请求但会无法正确处理并返回异常或SOAP错误,则会引发此错误。

您注意到例外的信息是什么,以及是否有任何InnerException

Marc

+0

Thx!如果我的理解正确,这意味着我应该在客户端的每个MyFunctionAsync()调用上尝试捕获CommunicationException。但我认为没有必要在服务器端做到这一点?在我的情况下,它并不经常发生。需要一段时间发送频繁的请求,直到我能够重现。异常说“NotFound”,而InnerException似乎是WebException。只有在调试模式下才能得到这个第一次机会异常。 – stiank81 2009-08-17 06:49:23

+0

是的,在客户端,我肯定会把我的服务调用放在try..catch中。在服务器端,您需要检查IErrorHandler接口并在服务类上实现该接口,以捕获服务器上发生的任何异常,并将它们转换为SOAP错误以完全“干净”;-) – 2009-08-17 07:28:01

+0

Thx!将警告服务器端可能出现的异常,如果有任何异常,请将其转换。 – stiank81 2009-08-17 08:40:54

0

你可以尝试这样的事:

+0

在客户端添加了这一点,但该例外从未到达客户端,因为这是第一次机会例外。但是一般来说,在使用WCF的时候,是否应该尝试捕获这种异常,或者我可以不要抛出通信类型异常? – stiank81 2009-08-16 20:08:41

+0

如果需要向客户端发送异常,您还应该捕获服务器端的异常并将其作为故障异常引发。必须在WCF合同中指定哪些错误例外。 – 2009-08-16 21:18:17

+0

真的吗?我需要在所有情况下都这样做,以防发生某种通信异常情况?有点希望WCF能为我处理这个问题。我试图在双方都发现异常,但这并没有改变。仍然只是看到第一次机会异常 - 它在自动生成的reference.cs中的EndMyServiceFunc()中。但是你说如果我不处理这种例外情况,有时候这可能会炸毁。 – stiank81 2009-08-16 21:43:03

相关问题