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

时间:2013-06-23 15:29:20

标签: wcf soap header

企业移动设备管理协议在HTTP POST请求中显示以下soap xml。如何将我的Web服务定义为soap标头,以在请求和响应中包含 Action,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>

2 个答案:

答案 0 :(得分:1)

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

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

通常,没有理由在响应中包含这些标头,这不是ws-addressing所必需的。如果需要,请使用消息检查器将它们推送到消息中。

答案 1 :(得分:0)

这是为了做到这一点,至少对于请求而言:

OperationContext.Current.RequestContext.RequestMessage.Headers.MessageId