如何在WCF请求和响应的soap头中添加MessageID?
企业移动设备管理协议在HTTP POST请求中显示了以下soap xml。如何将web服务定义为soap头,以在请求和响应中包含操作、MessageID、ReplyTo和to。我曾尝试在MessageCOntract中定义MessageHeader,但这会导致自定义名称空间前缀。我找不到更好的文档链接。如何在客户端和web服务端设置这些头如何在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
<?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文件。如果我需要帮助,我会重新检查并提出问题。当然。如果您能将此答案标记为正确,将不胜感激。