2012-03-27 98 views
0

大家好,祝大家好,在WCF處理來自XML HTTP的POST請求

根據上述標題,我試圖處理來自WCF中XML HTTP的POST請求。實際上,我已經可以使用HTTP Web Request處理請求,但由於舊庫以這種形式發送請求(如代碼中所示,我們使用的是MSXML2名稱空間),因此我們必須在此處維護此要求。

這裏是前端代碼(舊庫,將請求發送)

MSXML2.ServerXMLHTTP xmlhttp = new MSXML2.ServerXMLHTTP();     
xmlhttp.open("POST", "http://localhost/RestService/RestServiceImpl.svc/auth", false); 
xmlhttp.setRequestHeader("User-Agent", "Jakarta Commons-HttpClient/2.0.2"); 
String ClientRequest = @"<?xml version=""1.0"" encoding=""UTF-8"" standalone= ""yes""?> <RequestData xmlns=""http://www.eysnap.com/mPlayer""> <details>Ashu|29|7 Years|.NET</details></RequestData>"; 

xmlhttp.send(ClientRequest); 
int readyState = xmlhttp.readyState; 
int status = xmlhttp.status; 

雖然這裏的代碼爲WCF,我沒能處理:

public ResponseData Auth(RequestData rData)   
    { 
     try 
     { 
      Logger.log.Info("attempting to send request"); 
      // Call BLL here 
      var data = rData.details.Split('|'); 

      var response = new ResponseData     
      { 
       Name = data[0], 
       Age = data[1], 
       Exp = data[2], 
       Technology = data[3] 
      }; 

      Logger.log.Info("Sending request..."); 
      return response; 
     } 

     catch(System.Exception ex) 
     { 
      Logger.log.Fatal(ex.Message); 
      return null; 
     } 

    } 

在web.config中,我已經將綁定更改爲「customBinding」而不是「webHttpBinding」,因爲我在獲取請求時使用RAW格式而不是JSON格式的錯誤。

通過論壇和其他網站搜索後,我試着相應地改變web.config,但得到了xmlhttp status 400(Bad Request)。

在此先感謝您的建議。

+0

您是否試圖使用Fiddler監視您的請求?此外,RAW消息是由於您的請求未設置Content-Type標題屬性。只需將其設置爲application/xml或application/json,即可得到解決 – Rajesh 2012-03-27 11:28:58

回答

0

嘗試使用Fiddler監視您的請求,並查看RAW請求的樣子。它應該是這樣的:

POST http://localhost/RestService/RestServiceImpl.svc/auth HTTP/2.0 
Content-Type: application/xml 
Content-Length: 47 

<RequestData xmlns="http://www.eysnap.com/mPlayer"xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><details>Ashu|29|7 Years|.NET</details></RequestData> 
+0

Hi Rajesh,謝謝你的回覆。我更改了Content-Type標題:xmlhttp.setRequestHeader(「Content-Type」,「application/xml」); 它的工作原理!我現在可以更改xml輸入到WCF並獲得狀態200. 但是,對於使用Fiddler進行監控,我確實打開了Fiddler,但我不確定是否正確: – SmileForMe 2012-03-28 04:35:34

+0

我如何發佈json這個xml有屬性xmlns?我使用node.js請求。 – 2017-11-25 22:13:11

0

感謝您的答覆。我改變了內容類型標題:

xmlhttp.setRequestHeader("Content-Type", "application/xml"); 

它的工作原理!我現在可以在XML輸入更改爲WCF和獲取狀態200

然而,對於使用招的監控,我沒有打開提琴手,但我不知道如果我得到這個權利:

POST http://localhost:3015/default.aspx HTTP/1.1 
Accept: text/html, application/xhtml+xml, */* 
Referer: http://localhost:3015/default.aspx 
Accept-Language: en-MY 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) 
Content-Type: application/x-www-form-urlencoded 
Accept-Encoding: gzip, deflate 
Host: localhost:3015 
Content-Length: 220 
Connection: Keep-Alive 
Pragma: no-cache 
Cookie: ASP.NET_SessionId=qdzso1frp32nzw1yyca0xkev 

    __VIEWSTATE=%2FwEPDwUKLTUwNDQwMTA1MGRk2SgUm9rav%2BZYiqZHo5PtLZx1Eh67%2BxU309q4TRd3NLU%3D& __EVENTVALIDATION=%2FwEWBAKr8%2BqJAQLj5PzKCwKM54rGBgLs0bLrBr7W%2BQ74Ywyf9FnYR2DQIpRMPmXllwC5V5bOZfXnofpY&Button1=XML+HTTP&TextBox1= 

因此,我沒有得到像你上一篇文章中的預期結果。在打開我的示例web應用程序之前,是否應該先做其他任何設置?

順便說一下,我怎樣才能從數據契約中刪除命名空間?

<RequestData xmlns=""http://www.eysnap.com/mPlayer""><details>Ashu|29|7 Years|.NET</details></RequestData> 

是舊的要求,我試圖更改爲:

<RequestData><details>Ashu|29|7 Years|.NET</details></RequestData> 

和的RequestData類以及:

[DataContract()]  
public class RequestData 
{ 
    [DataMember]   
    public string details { get; set; } 
} 

這是因爲實際存在的請求沒有命名空間。現在我得到錯誤400刪除命名空間。是否有可能首先刪除名稱空間?

感謝

編輯:我改變DataContract到:

[DataContract(Namespace="")]  
public class RequestData 
{ 
    [DataMember]   
    public string details { get; set; } 
} 

,並設法讓HTTP狀態200!現在我正在嘗試將請求xml更改爲我們現有應用程序使用的請求。

+0

上面的請求是當你執行一個按鈕點擊一個網頁,它將數據發佈到在提琴手中捕獲的服務器。以類似的方式,當你打電話給Web服務時,它將被捕獲。 – Rajesh 2012-03-28 08:24:11

+0

感謝您的回覆。我不確定如何獲得在小提琴手中獲得的結果。但我想我會首先製作一些示例應用程序:) – SmileForMe 2012-03-28 08:35:02

+0

只需安裝Fiddler(http://www.fiddler2.com/fiddler2/),然後在執行對服務的調用之前,只需打開Fiddler即可。它會捕獲80端口上的任何流量。 – Rajesh 2012-03-28 08:38:27