客户端未调用 WCF 故障事件
WCF faulted event not called on client side
我有一个 wcf 服务回调。服务的初始化在客户端完成。服务时不时地进入故障状态。我尝试在客户端和服务器上注册故障事件。问题是只有服务器端故障事件正在触发,而客户端不知道出了什么问题,并且由于客户端创建了连接,所以服务器端知道它并没有帮助我。
我可以在服务器端故障事件上做些什么来告诉客户端出了点问题吗?
根据您的担忧,问题是只有服务器端故障事件正在触发,而客户端不知道。
当 WCF 服务发生异常时,服务将异常序列化为 SOAP 错误,然后将 SOAP 错误发送给客户端。
客户不知道出了问题
默认情况下,出于安全原因传播到客户端应用程序的 SOAP 故障中不包含未处理的异常详细信息。而是向客户端返回一个通用的 SOAP 错误。
我可以在服务器端故障事件上做些什么来告诉客户端出了问题吗?
您可以 include/append 排除 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>
有需要的通过代码,然后
[ServiceBehavior(IncludeExceptionDetailInFaults=true)]
通过这种方式,服务器端发生的任何异常都以 SOAP 信封内的 SOAP FAULT 的形式传送到客户端 message.And 在客户端捕获它。
catch (FaultException ex)
{
string errorMessage= = ex.Message;
}
注意:WCF 服务中未处理的异常将导致通信通道出现故障并且会话将丢失。一旦通信通道处于故障状态,我们就不能再使用同一个代理实例 class。我们将不得不创建一个新的代理实例 class.
我有一个 wcf 服务回调。服务的初始化在客户端完成。服务时不时地进入故障状态。我尝试在客户端和服务器上注册故障事件。问题是只有服务器端故障事件正在触发,而客户端不知道出了什么问题,并且由于客户端创建了连接,所以服务器端知道它并没有帮助我。 我可以在服务器端故障事件上做些什么来告诉客户端出了点问题吗?
根据您的担忧,问题是只有服务器端故障事件正在触发,而客户端不知道。
当 WCF 服务发生异常时,服务将异常序列化为 SOAP 错误,然后将 SOAP 错误发送给客户端。
客户不知道出了问题
默认情况下,出于安全原因传播到客户端应用程序的 SOAP 故障中不包含未处理的异常详细信息。而是向客户端返回一个通用的 SOAP 错误。
我可以在服务器端故障事件上做些什么来告诉客户端出了问题吗? 您可以 include/append 排除 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>
有需要的通过代码,然后
[ServiceBehavior(IncludeExceptionDetailInFaults=true)]
通过这种方式,服务器端发生的任何异常都以 SOAP 信封内的 SOAP FAULT 的形式传送到客户端 message.And 在客户端捕获它。
catch (FaultException ex)
{
string errorMessage= = ex.Message;
}
注意:WCF 服务中未处理的异常将导致通信通道出现故障并且会话将丢失。一旦通信通道处于故障状态,我们就不能再使用同一个代理实例 class。我们将不得不创建一个新的代理实例 class.