You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WCF 出现SOAPAction与HttpRequestMessageProperty值不匹配报错如何解决

问题根因

你猜测的问题原因完全正确:WCF框架默认会为消息内置的SOAP操作值自动包裹双引号,而你手动在HttpRequestMessageProperty中添加的SOAPAction值是不带引号的SendEcho,二者对比校验时就会触发不匹配错误。

可行解决方案

下面提供两种经过验证的实现方式,均可规避该问题:

方案1:手动为SOAPAction值补充双引号

直接修改原有添加请求头的逻辑,给值包裹双引号即可,修改后的代码如下:

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
    var reqMsgProperty = new HttpRequestMessageProperty();
    // 给SOAPAction值手动添加双引号,和WCF内置生成的格式对齐
    reqMsgProperty.Headers.Add("SOAPAction", "\"SendEcho\"");
    reqMsgProperty.Headers.Add("Content-Type", "text/xml;charset=UTF-8");
    request.Properties[HttpRequestMessageProperty.Name] = reqMsgProperty;
    //...
    return null;
}

方案2:直接修改Message的Action属性(更推荐)

该方案更符合WCF的设计规范,不需要手动操作HTTP请求头,WCF会自动完成SOAPAction头的格式处理和属性同步,避免人为格式错误:

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
    // 直接修改消息的Action属性,WCF会自动处理双引号和请求头同步
    request.Action = "SendEcho";
    
    var reqMsgProperty = new HttpRequestMessageProperty();
    reqMsgProperty.Headers.Add("Content-Type", "text/xml;charset=UTF-8");
    request.Properties[HttpRequestMessageProperty.Name] = reqMsgProperty;
    //...
    return null;
}

补充说明:SOAP 1.1规范明确要求SOAPAction请求头的值需要用双引号包裹,WCF的默认处理逻辑符合标准规范,优先选择方案2可降低后续维护成本。

内容的提问来源于stack exchange,提问作者Get

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:06:03