当使用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对象上调用该方法,则该服务可以正常工作,因此服务本身可用并且正常工作。
答案 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。