2012-08-25 66 views
0

我必須將XML文檔作爲參數發送,以使用Post方法請求WebRequest並獲取響應。 Web服務實現了以下方法:使用C#將XML文檔作爲參數傳遞給Web服務

public string Register(XmlDocument register){...} 

我試圖做這樣this,但我不能得到迴應,我不知道,我的代碼是工作=(

HttpWebRequest request = HttpWebRequest.Create("http://ws2.sti.gov.kg/TRKService/PatentService.asmx/Register") as HttpWebRequest; 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 

Encoding ex = Encoding.GetEncoding("iso-8859-1"); 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml("<foo><bar>baz</bar></foo>"); 
string rawXml = doc.OuterXml; 

string requestText = string.Format("register={0}", HttpUtility.UrlEncode(rawXml, ex)); 

Stream requestStream = request.GetRequestStream(); 
StreamWriter requestWriter = new StreamWriter(requestStream, ex); 
requestWriter.Write(requestText);    
requestWriter.Close(); 

也許有一個人工作的例子嗎?

+0

爲什麼不直接使用「添加服務引用」來使用服務? –

+0

嗨約翰,當我嘗試使用「添加服務引用」我得到以下錯誤:「請求失敗,HTTP狀態403:禁止(服務器拒絕指定的統一資源定位器(URL)。請聯繫服務器管理員。 )。「 – Max

+1

最簡單的方法可能是聯繫提供服務和請求其WSDL的人,以便可以使用svcutil.exe構建代理 –

回答

1

403錯誤

如果你得到一個403試圖導入時網絡服務,這可能不是你的錯。試試 在Web瀏覽器中查看wsdl文件。如果你仍然得到403錯誤,那麼他們沒有用,因爲你沒有權限使用該服務。

代碼語法

而且,在你的代碼我看來你沒有在任何地方讀迴響應。您的最後一條語句將XML寫入流中,但不會在任何地方回讀響應。

requestWriter.Write(requestText);    
requestWriter.Close(); 

SOAP

如果您正在通信的Web服務是一種基於SOAP那麼你的XML有效載荷必須符合SOAP標準。上面的示例代碼中使用了非常基本的XML,可能是因爲它只是一個例子,但它的工作,你將需要沿着

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <GetWeather xmlns="http://www.webserviceX.NET"> 
     <CityName>string</CityName> 
     <CountryName>string</CountryName> 
    </GetWeather> 
    </soap:Body> 
</soap:Envelope> 

<foo><bar>baz</bar></foo> 

行的格式要求同樣,你很顯然,這只是用foo作爲例子,但這也可能是問題的根源,因此請檢查您發送的實際XML負載。

相關問題