在发送肥皂消息"手动"我在WCF中遇到AddressingNone错误

时间:2016-05-17 15:57:49

标签: xml wcf soap ws-addressing

我试图通过SOAP消息(我已经提取)发送到我的WCF服务而不使用WCF客户端基础结构。 在不使用我的生产消息(和代码)的情况下,我已经能够设置同一问题的虚拟版本(感谢WF_WCF_Samples)。

所以合同看起来像这样:

[ServiceContract(Namespace="http://Microsoft.Samples.UsingUsing")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
}

查看实际WCF客户端发送的SOAP消息,我在WCF跟踪中获取此信息:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
        <To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:56852/service.svc</To>
        <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://Microsoft.Samples.UsingUsing/ICalculator/Divide</Action>
    </s:Header>
    <s:Body>
        <Divide xmlns="http://Microsoft.Samples.UsingUsing">
            <n1>0</n1>
            <n2>0</n2>
        </Divide>
    </s:Body>
</s:Envelope>

那是来自工作电话。 但是,如果我尝试这样做,我会得到以下在WCF跟踪中记录的异常:

  

寻址版本&#39; AddressingNone(http://schemas.microsoft.com/ws/2005/05/addressing/none)&#39;不支持添加WS-Addressing标头。

我尝试过像SoapUI甚至Httpie这样的程序来发送XML文件:

Httpie sending Soap message - failure

所以我收到了一个HTTP错误400 - 错误的请求。

我目前正在使用basicHttp(s)Binding WCF绑定。

我已经尝试搞乱绑定但没有任何工作。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

当我查看WCF跟踪(在服务端而不是客户端)时,我惊讶地发现WCF实际上在SOAP消息中添加了以下标头:

<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:56852/service.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://Microsoft.Samples.UsingUsing/ICalculator/Divide</Action>

当我把它拿出来时,我的请求没有问题。

Httpie sending Soap message - success

在设置像Wireshark这样的东西时,我设法看到实际的消息没有包含这个标题。某处WCF在跟踪期间在SOAP标头中添加了它。但发送通过是无效的。 HTTP Soap Action标头就足够了。