2009-04-15 79 views
1

我介绍了在我们的WCF服务中使用FaultException。调试WCF异常导致CommunicationException

为了测试这是我在服务器上创建以下功能:

public void ThrowException() 
    { 
     try 
     { 
      throw new ApplicationException("This is a test exception"); 
     } 
     catch (ApplicationException ex) 
     { 
      throw new FaultException<ApplicationException>(ex, "Test reason"); 

     } 
    } 

跳过领先一步。如果我运行它,它工作正常。但是,如果我使用调试器(VS2008)并允许代码在catch块中断开(通过在异常上启用中断或对其进行加载),我的客户端会生成一个CommunicationException。

调查这我发现这个论坛的帖子: http://social.msdn.microsoft.com/forums/en-US/wcf/thread/d1ae669f-9a62-4628-86c1-c15ff4068843/

问:为什么我看到这种行为,调试,只有当(我假设别人是不是)?我怎样才能避免这种行为?

+0

为了清楚起见,我的代码没有查看Exception.Data,我确保它不在监视窗口中,并关闭了Watch,Auto和Locals窗口。 – MattH 2009-04-15 16:49:56

回答

1

我不会称这是一个修复/解决方案,但我有一个解决方案非常适合我的情况。

正如我所说我刚刚开始WCF异常处理,并且我意识到IErrorHandler是处理我的异常,而不是方法级别try/catch的更好方法。

当调试器跳过ProvideFault的实现时,调试器不查看异常,因此它不会导致CommunicationException。

这可以工作,但我仍然想要一个真正的解决方案,因为有些情况下我想提供特定的异常,这些异常会在ProvideFault中保持不变。