Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
如何在WCF请求和响应的soap头中添加MessageID?_Wcf_Soap_Header - Fatal编程技术网

如何在WCF请求和响应的soap头中添加MessageID?

如何在WCF请求和响应的soap头中添加MessageID?,wcf,soap,header,Wcf,Soap,Header,企业移动设备管理协议在HTTP POST请求中显示了以下soap xml。如何将web服务定义为soap头,以在请求和响应中包含操作、MessageID、ReplyTo和to。我曾尝试在MessageCOntract中定义MessageHeader,但这会导致自定义名称空间前缀。我找不到更好的文档链接。如何在客户端和web服务端设置这些头 <?xml version="1.0"?> <s:Envelope xmlns:s="http://www.w3.org/2003

企业移动设备管理协议在HTTP POST请求中显示了以下soap xml。如何将web服务定义为soap头,以在请求和响应中包含操作、MessageID、ReplyTo和to。我曾尝试在MessageCOntract中定义MessageHeader,但这会导致自定义名称空间前缀。我找不到更好的文档链接。如何在客户端和web服务端设置这些头

 <?xml version="1.0"?>
    <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> <s:Header> 
    <a:Action s:mustUnderstand="1"> http://schemas.microsoft.com/windows/management/2012/01/enrollment/IDiscoveryService/Discover 
    </a:Action> 
    <a:MessageID>
    urn:uuid: 748132ec-a575-4329-b01b-6171a9cf8478
    </a:MessageID>
    <a:ReplyTo> <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo> 
    <a:To s:mustUnderstand="1"> https://ENROLLTEST.CONTOSO.COM/EnrollmentServer/Discovery.svc </a:To> 
    </s:Header> 
    <s:Body> 
    <Discover
    xmlns="http://schemas.microsoft.com/windows/management/2012/01/enrollment/"> 
    <request xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <RequestVersion>1.0</RequestVersion> 
    </request> 
    </Discover> 
    </s:Body> 
    </s:Envelope>

http://schemas.microsoft.com/windows/management/2012/01/enrollment/IDiscoveryService/Discover 
urn:uuid:748132ec-a575-4329-b01b-6171a9cf8478
http://www.w3.org/2005/08/addressing/anonymous
https://ENROLLTEST.CONTOSO.COM/EnrollmentServer/Discovery.svc  
1

使用自定义绑定,使这些头包含在请求中并被服务器接受:

  <binding name="NewBinding0">
    <textMessageEncoding messageVersion="Soap12WSAddressing10" />
    <httpTransport />
  </binding>


一般来说,没有理由在响应中包含这些头,ws-addressing并不强制要求这样做。如果需要,则使用消息检查器将它们推送到消息中。

这正是为了这样做,至少对于请求:


OperationContext.Current.RequestContext.RequestMessage.Headers.MessageId

Naveh,感谢您的回复。将绑定更改为消息版本为“Soap12WSAddressing10”的自定义绑定后,我能够在MSFT提供的WCF测试客户端应用程序中测试并获取正确的soap xml。但我在从应用程序访问IIS中托管的web服务时遇到问题。由于找不到服务器,因此出现错误400。这可能是另一个问题。我建议你提出一个新问题,这样它就会得到正确的关注。尝试在浏览器中访问WSDL文件,看看是否至少可以这样做。如果没有,则可能存在iis问题,请尝试上载一个虚拟asp.net pp以查看其是否有效。谢谢,我可以从iis浏览WSDL文件。如果我需要帮助,我会重新检查并提出问题。当然。如果您能将此答案标记为正确,将不胜感激。