在服务器上我抛出像这样的异常。捕获通信异常,而不是自定义故障异常 - WCF
catch(SqlException exception)
{
if (exception.Message.Contains("Custom error from stored proc"))
{
//Exception to be thrown when authentication fails.
throw new FaultException<MyServiceFault>(new MyServiceFault { MessageText = exception.Message });
}
}
而在客户端,我捕捉异常
catch(FaultException<MyServiceFault> faultException)
{
}
这里是我的MyServiceFault
[DataContract]
public class MyServiceFault
{
[DataMember]
public string MessageText { get; set; }
[DataMember]
public Guid Id { get; set; }
}
的问题是,在客户端,它并没有去追赶MyServiceFault而是转到通信异常catch块并抛出此错误
System.ServiceModel.CommunicationException: The underlying connection was closed: The connection was closed unexpectedly. ---> System.Net.WebException
我也在我的服务实现的接口中修饰了我的服务方法[FaultContract(typeof(MyServiceFault))]
。
在我的web.config servicebehaviour标签由 <serviceDebug includeExceptionDetailInFaults="true" />
任何想法,我要去哪里错了。
这个问题发生在Windows 7上。可以有一个相关的原因吗?
重要更新
根据应答者,在服务器上的任何未处理的异常可能会导致在客户端的通讯异常抛出,它可能没有什么关系,你已在服务器上抛出的自定义错误异常。因此解决方案是记录服务器上的错误并找出导致此行为的错误。这是我发现和实施的一个非常有用的开源日志记录功能,在您的项目进入生产环境后,它甚至会更有用。非常感谢回答者。
A better way of logging exceptions in WCF
我正在使用相同的try catch模式来调用服务器方法。 并感谢您的配置设置。我会看到细节,但它给了我很多的XML。任何xsl为它看到它格式正确? – IsmailS 2010-04-26 10:10:48
@Ismail:您需要使用[SvcTraceViewer.exe](http://msdn.microsoft.com/zh-cn/library/ms732023.aspx)来读取日志文件。我会更新我的答案。 – 2010-04-26 10:43:18
我在Windows 7上开发。可以有任何相关的原因吗? 它在企业库异常处理块的某处失败。 在此处查看详情http://entlib.codeplex.com/Thread/View.aspx?ThreadId=205122。我最后发布了它。在此先感谢 – IsmailS 2010-04-26 11:31:36