WCF服务应引发何种异常类型?
我正在将代码从ASMX转换为WCF。在我的ASMX web服务中,我抛出了如下SOAP异常:WCF服务应引发何种异常类型?,wcf,Wcf,我正在将代码从ASMX转换为WCF。在我的ASMX web服务中,我抛出了如下SOAP异常: if (ex.InnerException != null) { SoapException se = new SoapException(ex.Message, SoapException.ServerFaultCode, Context.Request.Url.AbsoluteUri, ex.InnerException);
if (ex.InnerException != null)
{
SoapException se = new SoapException(ex.Message, SoapException.ServerFaultCode, Context.Request.Url.AbsoluteUri, ex.InnerException);
throw se;
}
我应该向调用我的服务的WCF客户端抛出什么样的异常?我猜SOAP例外是错误的类型,因为测试客户机没有将其视为有效错误,只是说-web服务中发生了内部错误 基本上,在WCF服务中,您最好只抛出
FaultException
(或FaultException
)
这是因为两件事:由于WCF是为互操作而设计的(你的客户端很容易是一个非.NET应用程序),你不应该使用.NET例外-这些都是特定于平台的。第二:如果您使用FaultException(转换为SOAP故障),您的通道(客户端和服务器之间的连接)将不会被中断,或者说“出现故障”。服务器端的WCF运行时将所有未处理的.NET异常视为“严重”异常,从而使通道处于故障状态,假设发生了非常糟糕的情况
如果您的通道出现故障,您将无法再使用它-您必须关闭客户端代理并从头开始重新创建它
如果您想(或必须)具有很强的互操作性,您可以在一个单独的文件中定义SOAP故障是故障契约(类似于数据契约),然后抛出
FaultException
,其中T将是您的故障契约之一。如果您严格地说是.NET,您也可以将.NET异常作为泛型类型T粘贴到FaultException中,如果您愿意的话-通道不会出现故障(例如,您可以抛出一个FaultException
,从而发信号返回出错的地方)。在WCF中,您使用FaultException
。例如,见