2013-06-23 17 views
1

企業移動設備管理協議在HTTP POST請求中顯示下面的soap xml。如何將我的Web服務定義爲肥皂標題以在請求和響應中包含Action,MessageID,ReplyTo和To。我已經嘗試在MessageCOntract中定義MessageHeader,但這會產生自定義名稱空間前綴。我無法找到更好的文檔鏈接。如何在客戶端和Web服務端設置這些頭文件?如何在WCF請求和響應的SOAP標題中添加MessageID?

<?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> 

回答

1

使用自定義的結合,使得這些報頭被包括在所述請求和被服務器接受:

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

通常沒有理由要包括在響應這些報頭,這是不由ws-addressing強制執行。如果需要,然後使用消息檢查器將它們推送到消息。

+0

人Naveh,感謝您的答覆。將消息版本爲「Soap12WSAddressing10」的綁定更改爲自定義綁定後,我能夠在由MSFT提供的WCF Test Client應用程序中測試並獲取正確的soap xml。但是我從我的應用程序訪問IIS中託管的Web服務時遇到問題。找不到服務器時出現錯誤400。 –

+0

這可能是一個不同的問題。我建議你開一個新的問題,以獲得正確的關注。嘗試在瀏覽器中訪問WSDL文件以查看是否至少有效。如果不是可能會有iis問題,請嘗試上傳一個虛擬asp.net pp以查看它是否有效。 –

+0

謝謝,我可以從IIS瀏覽WSDL文件。我會重新檢查並提出問題,如果我需要任何幫助。 –

0

這是爲了做到這一點,至少要求:

OperationContext.Current.RequestContext.RequestMessage.Headers.MessageId

相關問題