Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何删除<;a:To s:mustUnderstand=";1“&燃气轮机;来自SOAP请求_C#_Xml_Soap_Wcf Binding_Soap Client - Fatal编程技术网

C# 如何删除<;a:To s:mustUnderstand=";1“&燃气轮机;来自SOAP请求

C# 如何删除<;a:To s:mustUnderstand=";1“&燃气轮机;来自SOAP请求,c#,xml,soap,wcf-binding,soap-client,C#,Xml,Soap,Wcf Binding,Soap Client,我使用的是第三方双工服务(假设实现了回调契约)。下面是配置部分。服务抛出异常,表示无法理解请求XML“a:To mustUnderstand=“1”中的标记 请求XML: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/

我使用的是第三方双工服务(假设实现了回调契约)。下面是配置部分。服务抛出异常,表示无法理解请求XML“a:To mustUnderstand=“1”中的标记


请求XML:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<a:MessageID>urn:uuid:76901ce5-0bab-42e2-ac76-18eddf367d25</a:MessageID>
<a:To s:mustUnderstand="1">http://vmsvalservice-uat.rpdata.com/vms-valuation/soap/soapws</a:To>
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

urn:uuid:76901ce5-0bab-42e2-ac76-18eddf367d25
http://vmsvalservice-uat.rpdata.com/vms-valuation/soap/soapws
我尝试了两种方法来修复它

  • 我曾尝试在BeforeSendRequest之前控制该行为,但在调用该事件之后,该标记被添加到Soap信封中

  • 试图通过编写类并在接受XML时覆盖mustUnderstand属性,将mustUnderstand重置为0

  • 不管怎样,我都可以阻止这个标签熄灭或重置,我必须理解


    非常感谢您的任何建议。

    我验证了xml,发现架构需要一个。您应该按照以下方式验证整个xml:从VS菜单:项目:添加新项:xml文件。将xml粘贴到窗口中,确保只有一个标识行。任何错误都将显示在错误列表中,就像编译器一样错误

    <?xml version="1.0" encoding="utf-8" ?>
    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
      <s:Header>
        <a:MessageID>urn:uuid:76901ce5-0bab-42e2-ac76-18eddf367d25</a:MessageID>
        <a:To s:mustUnderstand="1">http://vmsvalservice-uat.rpdata.com/vms-valuation/soap/soapws</a:To>
        <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        </o:Security>
      </s:Header>
      <s:Body>
      </s:Body>
    </s:Envelope>​
    
    
    urn:uuid:76901ce5-0bab-42e2-ac76-18eddf367d25
    http://vmsvalservice-uat.rpdata.com/vms-valuation/soap/soapws
    ​
    
    通过显式删除给定标题并随后重新插入,实际解决了此问题:

        newHeader = MessageHeader.CreateHeader("To", "http://www.w3.org/2005/08/addressing", m.Headers.To.ToString(), false);
        index = m.Headers.FindHeader("To", Definitions.WSA_NAMESPACE_FULL);
        m.Headers.RemoveAt(index);
        m.Headers.Insert(index, newHeader);
    
        newHeader = MessageHeader.CreateHeader("To", "http://www.w3.org/2005/08/addressing", m.Headers.To.ToString(), false);
        index = m.Headers.FindHeader("To", Definitions.WSA_NAMESPACE_FULL);
        m.Headers.RemoveAt(index);
        m.Headers.Insert(index, newHeader);