WCF:FaultContract(typeof(ExceptionDetail))问题

use*_*598 5 wcf faultcontract

我已经[FaultContract(typeof(ExceptionDetail))]为我的操作合同设置了属性.当我尝试将服务添加到客户端应用程序时,我收到此错误 - "Custom tool error: Failed to generate code for the service reference 'ServiceReference1'. Please check other error and warning messages for details."

但是当我注释掉FaultContract属性时,我能够在我的客户端应用程序中添加wcf服务引用.

mar*_*c_s 9

具有FaultContracts的关键是首先可以从服务中传回SOAP错误,这不会破坏服务器和客户端之间的通信通道(处理错误条件,例如优雅和互操作的.NET异常),其次,使用FaultContracts,您的服务器比抛出类型的错误(FaultException<T>)和您的客户端可以捕获它们.

如果您想要或需要真正可互操作,您需要:

  • 将所有FaultContract类型定义为使用[DataContract]属性修饰的类
  • 捕获服务器上的所有.NET异常(使用例如IErrorHandler接口)并将它们转换为可互操作的SOAP错误

如果您控制线的两端并且两端都是.NET,那么您可以通过一步简化:在服务器上,处理所有.NET异常并将其转换为例如FaultException<ArgumentOutOfRangeException>,即创建"故障(无论如何). NET异常)"然后在客户端上,捕获那些类型化的FaultException并处理它们:

[FaultContract(typeof(ArgumentOutOfRangeException)]
[OperationContract]
public void CallService(.......)
Run Code Online (Sandbox Code Playgroud)

然后在您的实现中,使用此:

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....
}
Run Code Online (Sandbox Code Playgroud)


小智 0

使用http://msdn.microsoft.com/en-us/library/ms732023.aspx中的服务跟踪查看器工具来查看活动跟踪。