使用二进制文件时丢失WCF FaultException细节

时间:2014-10-18 10:42:19

标签: wcf soap encoding wcf-binding faultexception

我有一个带有以下自定义绑定的WCF服务:

    <binding name="binaryHttpBinding" >
      <binaryMessageEncoding />
      <httpTransport maxReceivedMessageSize="2147483647" />
    </binding>

(客户端当然具有与此绑定匹配的配置)。问题是客户端没有收到通用的FaultException,例如&#34; T&#34;没有收到客户端,如果我跟踪呼叫,我可以验证它。但是,如果我使用Soap 1.2将textMessageEncoding替换为textMessageEncoding,则所有故障异常都会充满故障详细信息。

我在网上搜索并且无法找到任何声称通过HTTP的二进制消息编码与通用WCF故障异常不兼容的信息。此外,我看起来无法控制大部分二进制消息编码 - 例如,我无法在配置SOAP消息版本中设置(WCF不支持二进制编码)。我想知道这种情况是否得到支持。

1 个答案:

答案 0 :(得分:3)

在花了几个小时试图找出可能出错的地方之后,我终于让它发挥了作用。失败的两个原因,其中没有一个显而易见。

  1. 故障消息类已重写ToString方法,该方法进行了一些计算。当然把这样的逻辑放在ToString中是不明智的,但谁能想到这会影响二进制序列化呢?
  2. FaultException构造函数有一个可选参数“actionName”,我将其设置为发生异常的方法的名称。显然,WCF对于可以分配给动作名称的内容非常挑剔,但将其留空始终有效。再一次,谁能猜到它只会影响二进制序列化并以如此奇怪的方式(因此它会丢弃客户端的消息错误)?