如何使用HTTPWebRequest在Web服务上调用Web方法?

时间:2010-06-24 05:12:27

标签: .net web-services

当使用HTTPWebRequest对象调用Web服务并提供wsdl参数时,我将描述页面设置为ok。

Dim req As Net.HttpWebRequest
Dim resp As Net.HttpWebResponse
Dim sr As IO.StreamReader
Dim text As String

req = Net.WebRequest.Create("http://www.mysite.com/DS.asmx?wsdl") ' works '
resp = req.GetResponse
sr = New IO.StreamReader(resp.GetResponseStream)
text = sr.ReadToEnd

但是,当我尝试使用显示为soapAction的引用调用其中一个方法时,我得到(404)Not Found。

req = Net.WebRequest.Create("http://mysite.com/DS/StaffList") ' fails '

我应该调用一个方法的方式有什么不同吗?我是否误解了地址的结构?

注意:如果我在Visual Studio项目中设置标准WebReference并在WebService对象上调用该方法,则该服务可以正常工作,因此服务本身可用并且正常工作。

2 个答案:

答案 0 :(得分:1)

要调用SOAP Web服务,您需要POST XML request in a SOAP envelope。这就是使用WebReference生成的类在幕后进行的操作。除非您有令人信服的理由,否则不应使用HttpWebRequest等低级类调用SOAP Web服务,而是使用Add WebReference从WSDL生成代理。

看看this MSDN article。另请注意,经典ASMX Web服务现在被视为已弃用的技术,应由WCF替换。

答案 1 :(得分:0)

您正在尝试预先WCF网络服务。 如果可以选择迁移到WCF服务,则可以将服务映射到RESTful enpoints

REST(Representational State Transfer)用于(在其他选项中)描述URL结构中的函数调用,而不需要其他内容,如SOAP。