如何使用HttpWebRequest调用Web服务

时间:2010-06-08 02:32:30

标签: .net vb.net web-services httpwebrequest

我能够使用下面的代码从服务器成功检索wsdl。

我现在如何从同一服务中调用方法(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()

1 个答案:

答案 0 :(得分:0)

我相信你唯一的问题是网络服务器的配置。每个Web服务的配置(在我的情况下是web.config文件,因为我使用的是IIS)应该允许管理允许访问它的协议:Get,Post和/或Soap。

我刚刚测试了自己的网络服务,它回复了我浏览器的GET请求...它也按预期回复了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())
祝你好运。