2012-02-16 60 views
1

我正在測試從.net客戶端應用程序調用基於SOAP的服務,並且正在運行SOAP標頭看起來消失的一些奇怪問題。Web服務調用期間刪除SOAP標頭

設置的簡要說明:我使用的Web服務提供者提供創建我的代理對象一個WSDL

。在我的代碼中,聲明瞭一個我想調用的服務客戶端實例。構建該方法所需的有效負載,然後調用該方法。

我已經定義了我自己的檢查器,它將請求消息寫入BeforeSendRequest函數中的文本文件,以便我可以檢查發送的內容。

我的輸出文件包括SOAP頭指定SOAP動作被稱爲:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">urn:actionName</Action> 
    </s:Header> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

然而,當我在提琴手檢查請求我看到:

POST http://itk1:4848/syncsoap HTTP/1.1 
Content-Type: text/xml; charset=utf-8 
VsDebuggerCausalityData: uIDPo3+FD6fhly5OnM0GeeaNhJ8AAAAAqHE+abP1+EWcEPeRvh8Oj4EFi5tL0elHlKdqfGJg1AIACQAA 
SOAPAction: "urn:actionName" 
Host: itk1:4848 
Content-Length: 9651 
Expect: 100-continue 
Connection: Keep-Alive 

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body 

我的行動似乎已經從SOAP信封中刪除,並已成爲一個基本的標題,所以當我打電話的服務獲取請求時,它無法在預期的位置找到該操作。

作爲一個測試,我試着用WebRequest.Create()創建一個基本請求,併發布之前從我的消息檢查器中檢索到的輸出文件。當這個命中Fiddler顯示SOAP Header和Action已被保留在SOAP信封中時。

我認爲這是WCF的幫助和修改我的請求?我怎樣才能讓它停止使用我的信息並按照原來的結構發送?

+0

看起來你的SOAP頭正在轉換爲HTTP頭 – 2012-02-16 14:54:34

+0

信封是如何創建的?通過代理類?代理類是如何創建的? – Jeff 2012-02-16 15:01:25

+0

@傑夫信封來自代理。代理是從提供的WSDL創建的。這些課程用例如 2012-02-16 15:31:18

回答

1

我已經通過郵件檢查手工編寫自己的頭解決了這個問題。

即在BeforeSendRequest我現在做:

request.Headers.Add(MessageHeader.CreateHeader("Action", WSANamespace, _headerInfo.Action)) 

它正確地寫出來與我需要一些其他的SOAP標頭。

奇怪的是,如果我向調試監聽器寫出請求,我會發現信封現在包含2個Action頭,但到請求點擊Fiddler時,信封中的一個Action都可以正常工作 - 我很樂意由於我打電話的服務需要這個,因此將原始操作轉換爲HTTP標頭。