2

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

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

(客户端当然有匹配这个绑定的配置)。问题是客户端没有收到通用的FaultException,例如客户端没有收到“T”,如果我跟踪调用,我可以验证它。但是,如果我使用 Soap 1.2 将 binaryMessageEncoding 替换为 textMessageEncoding,则所有故障异常都会包含故障详细信息。

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

4

1 回答 1

3

在花了相当多的时间试图找出可能出错的地方之后,我终于让它工作了。失败的两个原因,没有一个是显而易见的。

  1. 故障消息类已覆盖执行某些计算的 ToString 方法。当然将这样的逻辑放在 ToString 中是不明智的,但谁能猜到这只会影响二进制序列化呢?
  2. FaultException 构造函数有一个可选参数“actionName”,我将其设置为发生异常的方法的名称。显然 WCF 对可以分配给动作名称的内容非常挑剔,但将其留空总是有效的。同样,谁能猜到它只影响二进制序列化并且以这种奇怪的方式(因此它丢弃了客户端的消息错误)?
于 2014-10-20T20:40:56.457 回答