【问题标题】:How to call a web service using HttpWebRequest如何使用 HttpWebRequest 调用 Web 服务
【发布时间】:2011-02-28 23:34:37
【问题描述】:

我能够使用以下代码从服务器成功检索 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()

【问题讨论】:

  • 为什么? Web 服务引用有什么问题?
  • 您通常不会——也就是说,除非您愿意“说”Web 服务(又名 SOAP)。 HttpWebRequest 只是 Web 服务使用的一种传输机制(通常也是唯一一种)——可以说是通过 Web 服务引用添加的最简单的(尽管有它们自己的怪癖)。您可以更改使用的请求对象和选项。
  • 服务将被非dotNet环境调用。我想知道不使用网络服务代理是怎么做到的。
  • 如果它是由类似的环境(例如 Java)完成的,那么您仍然使用代理来完成它。如果您需要从 JavaScript 或其他“纯 Web”环境中执行此操作,请立即放弃 ASMX,并使用 WCF 构建自己的 REST 服务;这样您就可以使用 HTTP GET 和 POST 完成所有操作。

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


【解决方案1】:

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

我刚刚测试了我自己的网络服务,它从我的浏览器回复 GET 请求...它还按预期回复 POST 请求(我将 http://www.4guysfromrolla.com/articles/022410-1.aspx 中的一些代码改编为以下 sn-p: )

    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())

祝你好运。

【讨论】:

    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 2021-05-17
    相关资源
    最近更新 更多