Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF服务应引发何种异常类型?_Wcf - Fatal编程技术网

WCF服务应引发何种异常类型?

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);

我正在将代码从ASMX转换为WCF。在我的ASMX web服务中,我抛出了如下SOAP异常:

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
。例如,见