2010-06-08 83 views
2

我能夠使用下面的代碼從服務器成功檢索wsdl。如何使用HttpWebRequest調用Web服務

我現在怎樣從同一個服務調用一個方法(GetVersion)?

嘗試http://www.servername.com/DataService.asmx/GetVersion返回一個錯誤,表示無法找到頁面。我從.NET WebService引用中調用方法沒有問題,但我希望能夠使用HttpWebRequest

Dim req As HttpWebRequest 
Dim resp As HttpWebResponse 
Dim sr As IO.StreamReader 

req = WebRequest.Create("http://www.servername.com/DataService.asmx?wsdl") 
resp = req.GetResponse 

sr = New IO.StreamReader(resp.GetResponseStream) 
txt.Text = sr.ReadToEnd 
sr.Close() 
+0

爲什麼? Web服務參考有什麼問題? – SLaks 2010-06-08 02:36:47

+0

你通常不會 - 也就是說,除非你願意「說」web服務(又名SOAP)。 HttpWebRequest只是Web服務使用的一種傳輸機制(通常是唯一一種) - 可以說通過Web服務引用添加了最簡單的(儘管有自己的怪癖)。您*可以*更改使用的請求對象和選項。 – 2010-06-08 02:41:21

+0

該服務將由非dotNet環境調用。我想知道它是如何完成的,而不是使用Web服務代理。 – Bill 2010-06-08 02:48:46

回答

0

我相信你唯一的問題是網絡服務器的配置。每個Web服務的配置(在我的情況下,web.config文件,因爲我使用IIS)應允許管理允許訪問它的協議:Get,Post和/或Soap。

我剛剛測試了我自己的網絡服務,並回復從我的瀏覽器的請求......這也回答了預期POST請求(我改編自http://www.4guysfromrolla.com/articles/022410-1.aspx一些代碼到下面的代碼片段:)

Dim payload As Byte() 
    payload = Text.Encoding.ASCII.GetBytes("paramName=firstValue&p2=secondValue") 

    Dim webRequest As System.Net.HttpWebRequest 
    webRequest = System.Net.HttpWebRequest.Create("http://www.servername.com/DataService.asmx/GetVersion") 
    webRequest.Method = "POST" 
    webRequest.KeepAlive = False 
    webRequest.ContentType = "application/x-www-form-urlencoded" 
    webRequest.ContentLength = payload.Length 

    Dim reqStream As System.IO.Stream 
    reqStream = webRequest.GetRequestStream() 
    reqStream.Write(payload, 0, payload.Length) 
    reqStream.Close() 

    Dim webResponse As System.Net.HttpWebResponse 
    webResponse = webRequest.GetResponse() 

    Dim reader As System.IO.StreamReader 
    reader = New System.IO.StreamReader(webResponse.GetResponseStream()) 
    Dim xmlDoc As System.Xml.XmlDocument 
    xmlDoc = New System.Xml.XmlDocument() 
    xmlDoc.LoadXml(reader.ReadToEnd()) 

祝你好運。