客户端未调用WCF故障事件

客户端未调用WCF故障事件,wcf,wcf-binding,Wcf,Wcf Binding,我有一个wcf服务回调。服务的初始化在客户端完成。服务不时会进入故障状态。我尝试在客户端和服务器上注册故障事件。问题是,只有服务器端的故障事件被触发,而客户端不知道发生了什么错误,而且由于客户端创建了连接,所以服务器端知道这一点对我没有帮助。 在服务器端故障事件中,我是否可以做些什么来告诉客户端出了问题 根据您的担忧,问题是只有服务器端故障事件正在触发,而客户端不知道 当WCF服务中发生异常时,该服务将异常序列化为SOAP错误,然后将SOAP错误发送给客户端 客户不知道出了什么问题 默认情况下,

我有一个wcf服务回调。服务的初始化在客户端完成。服务不时会进入故障状态。我尝试在客户端和服务器上注册故障事件。问题是,只有服务器端的故障事件被触发,而客户端不知道发生了什么错误,而且由于客户端创建了连接,所以服务器端知道这一点对我没有帮助。 在服务器端故障事件中,我是否可以做些什么来告诉客户端出了问题

根据您的担忧,问题是只有服务器端故障事件正在触发,而客户端不知道

当WCF服务中发生异常时,该服务将异常序列化为SOAP错误,然后将SOAP错误发送给客户端

客户不知道出了什么问题

默认情况下,出于安全原因传播到客户端应用程序的SOAP故障中不包括未处理的异常详细信息。相反,会将一个通用SOAP错误返回给客户端

在服务器端故障事件中,我是否可以做些什么来告诉客户端出了问题? 您可以将异常包括/附加到SOAP错误。 只要代码中出现异常,就将其标记为soap错误

例如,您试图抛出一个异常(如除以零),捕获它并将其包含在FaultException中

throw new FaultException("Denomintor cannot be ZERO", new FaultCode("DivideByZeroFault"));
如果要在SOAP故障中包括异常详细信息,请启用IncludeExceptionDetailInFaults设置

通过配置

<behaviors>
  <serviceBehaviors>
    <behavior name="inculdeExceptionDetails">
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
通过这种方式,在服务器端发生的任何异常都会以SOAP错误的形式在SOAP消息的信封内传递到客户端,并在客户端捕获它

catch (FaultException ex)
{
string errorMessage= = ex.Message;
}

注意:WCF服务中未经处理的异常将导致通信通道故障,会话将丢失。一旦通信通道处于故障状态,我们就不能再使用代理类的同一实例。我们必须创建代理类的一个新实例。

单靠描述还不足以说明什么……您需要添加相关的代码和配置。是的,您可以使用FaultException或FaultExceptionExceptions告诉客户端服务器端发生了异常。@Hameed,我可以在服务器故障事件中抛出它吗?
catch (FaultException ex)
{
string errorMessage= = ex.Message;
}