Wcf 使用BasicHttpBinding时,FaultException无法正常工作

Wcf 使用BasicHttpBinding时,FaultException无法正常工作,wcf,wcf-binding,Wcf,Wcf Binding,因此,当我使用BasicHttpBinding时,我注意到FaultException没有给出正确的结果。当我使用WSHttpBinding时,它可以在文件中工作 问题是,如果我从WCF服务抛出如下的FaultException var translations = new List<FaultReasonText> { new FaultReasonText("FaultReasonText 1"), new FaultReasonText("FaultReasonText 2")

因此,当我使用
BasicHttpBinding
时,我注意到
FaultException
没有给出正确的结果。当我使用
WSHttpBinding
时,它可以在文件中工作

问题是,如果我从WCF服务抛出如下的
FaultException

var translations = new List<FaultReasonText> { new FaultReasonText("FaultReasonText 1"), new FaultReasonText("FaultReasonText 2") };

throw new FaultException<MessageServiceFault>(MessageServiceFault.Fault1, new FaultReason(translations));
编辑

但是,也就是说,您可以根据用户的语言设置提供许多不同的文本字符串。Translations bucket保存所有不同的文本字符串及其关联的文化标识符(由文本绑定在一起)。如果没有为错误原因或翻译搜索指定区域性,则假定的区域性为当前线程区域性。例如,如果您想要翻译成“en-UK”,我们将首先查找“en-UK”,然后再查找“en”。如果我们仍然找不到匹配项,那么我们将使用列表中的第一个翻译,可以是任何内容


如果是这样,为什么在
WsHttpBinding
的情况下,它会返回2
FaultReasonText

要使用FaultException,您需要在web服务上激活SOAP 1.2

BasicHttpBinding使用SOAP 1.1,WSHttpBinding使用SOAP 1.2。这就是为什么它与WSHttpBinding而不是BasicHttpBinding一起工作

与其使用BasicHttpBinding,不如使用customBindings,以及textMessageEncoding和httpTransport:

<customBinding>
    <binding name="simpleBinding">
        <textMessageEncoding messageVersion="Soap12" writeEncoding="utf-8" />
        <httpTransport />
    </binding>
</customBinding>

如果将默认basicHttpBinding转换为:将获得:

<!-- generated via Yaron Naveh's http://webservices20.blogspot.com/ -->
<customBinding>
    <binding name="NewBinding0">
        <textMessageEncoding MessageVersion="Soap11" />
        <httpTransport />
    </binding>
</customBinding>
<!-- generated via Yaron Naveh's http://webservices20.blogspot.com/ -->

源绑定:

<bindings>
    <basicHttpBinding>
        <binding name="NewBinding0" />
    </basicHttpBinding>
</bindings>


试着将SOAP 12激活到您的服务中,它就会起作用
basicHttpBinding
还支持SOAP 1.2。@JohnSaunders,RomEh的答案不正确。但我猜basicHttpBinding不支持SOAP 1.2。读这篇文章,你不相信我,看看这个工具:。
<bindings>
    <basicHttpBinding>
        <binding name="NewBinding0" />
    </basicHttpBinding>
</bindings>