我一直在调试我新创建的 WCF 服务故障合同的一个问题,最后发现是什么破坏了它。
我这样定义服务:
[ServiceContract]
public interface IService1
{
[OperationContract]
[FaultContract(typeof(ApplicationException))]
string GetData();
}
在我的服务中,我正在处理服务中的异常,如下所示:
public string GetData()
{
try
{
// do stuff
}
catch(Exception e)
{
ApplicationException ae = new ApplicationException("oh dear!", e );
throw new FaultException<ApplicationException>( ae,
new FaultReason(ae.Message));
}
}
但是,客户端永远不会收到错误异常,而是会收到一个异常:
接收对...的 HTTP 响应时发生错误这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志
如果我像这样更改服务上的代码(即:在构造 ApplicationException 时不要设置内部异常),它会按预期工作。
public string GetData()
{
try
{
// do stuff
}
catch(Exception e)
{
ApplicationException ae = new ApplicationException("oh dear!");
throw new FaultException<ApplicationException>( ae,
new FaultReason(ae.Message));
}
}
如果设置了内部异常,谁能解释为什么这可能会失败?我在文档中的任何地方都看不到它。