WCF:FaultContract(typeof(ExceptionDetail除外))问题
我已将属性WCF:FaultContract(typeof(ExceptionDetail除外))问题,wcf,faultcontract,Wcf,Faultcontract,我已将属性[FaultContract(typeof(exceptiondeail))]放入我的操作合同中。尝试将服务添加到客户端应用程序时,出现以下错误-“自定义工具错误:无法为服务引用“ServiceReference1”生成代码。有关详细信息,请查看其他错误和警告消息。” 但是,当我注释掉FaultContract属性时,我可以将wcf服务引用添加到我的客户端应用程序中。从中使用服务跟踪查看器工具来查看活动跟踪。删除该FaultContract,而是配置includeExceptionDe
[FaultContract(typeof(exceptiondeail))]
放入我的操作合同中。尝试将服务添加到客户端应用程序时,出现以下错误-“自定义工具错误:无法为服务引用“ServiceReference1”生成代码。有关详细信息,请查看其他错误和警告消息。”
但是,当我注释掉FaultContract属性时,我可以将wcf服务引用添加到我的客户端应用程序中。从中使用服务跟踪查看器工具来查看活动跟踪。删除该
FaultContract
,而是配置includeExceptionDetailInFaults
:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="Behavior">
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
拥有FaultContract的意义在于,首先可以从服务传回SOAP故障,这不会中断服务器和客户端之间的通信通道(以优雅和互操作的方式处理.NET异常等错误情况),其次,使用FaultContract,您的服务器不会抛出类型错误(
FaultException
),您的客户端可以捕获这些错误
如果您想要或需要真正的互操作性,您需要:
- 将所有FaultContract类型定义为用[DataContract]属性修饰的类
- 捕获服务器上的所有.NET异常(使用例如IErrorHandler接口),并将它们转换为可互操作的SOAP故障
FaultException
,即创建一个“fault of(whatever.NET exception)”,然后在客户端上,捕获这些类型的FaultException并处理它们:
[FaultContract(typeof(ArgumentOutOfRangeException)]
[OperationContract]
public void CallService(.......)
然后在您的实现中,使用以下方法:
try
{
clientProxy.CallService();
}
catch(FaultException<ArgumentOutOfRangeException> ex)
{
// handle the most specific exception first
}
catch(FaultException ex)
{
// handle all other, unspecific server faults
}
catch(CommunicationException ex)
{
// handle all other, client-proxy related WCF errors
}
catch(Exception ex)
{
// handle anything else....
}
试试看
{
clientProxy.CallService();
}
捕获(FaultException-ex)
{
//首先处理最具体的异常
}
捕获(FaultException-ex)
{
//处理所有其他非特定的服务器故障
}
捕获(通信例外)
{
//处理所有其他与客户端代理相关的WCF错误
}
捕获(例外情况除外)
{
//处理其他事情。。。。
}
几分钟前我也有同样的问题。
这是因为缺少默认构造函数。还请记住,所有属性都必须具有公共的get/set访问器。@jitus:在这种情况下,您不需要列出该异常。根据,建议只用于调试。我说不出为什么。