微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Vbscript调用.NET WebService

前面曾经说到了一个vbscript调用.NET WebService的常用方法,
http://v-instru.com/blog/posts/233.aspx.我在本地测试的结果运行良好,但是使用其中将要部署的某个远程主机的结果却一直是返回500错误,百思不得其解,但是在测试local的时候SOAP的request和response事例突然让我有另外一种想法,构造Soap请求的xml字符串给xmlhttp对象来send,于是根据local显示的例子构造了一个soapRequest的string,发送给了即将部署的远程主机,结果终于返回了200的status code,并且可以顺利取得responseXML.类似代码如下:
Dim url,xmlhttp,dom,node,xmlDOC '根据webservice的测试叶不同的<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>构造不同的soap request SoapRequest = "&amp;lt;?xml version="&amp;amp;CHR(34)&amp;amp;"1.0"&amp;amp;CHR(34)&amp;amp;" encoding="&amp;amp;CHR(34)&amp;amp;"utf-8"&amp;amp;CHR(34)&amp;amp;"?&amp;gt;"&amp;amp; _ "&amp;lt;soap:Envelope xmlns:xsi="&amp;amp;CHR(34)&amp;amp;"http://www.w3.org/2001/XMLSchema-instance"&amp;amp;CHR(34)&amp;amp;" "&amp;amp; _ "xmlns:xsd="&amp;amp;CHR(34)&amp;amp;"http://www.w3.org/2001/XMLSchema"&amp;amp;CHR(34)&amp;amp;" "&amp;amp; _ "xmlns:soap="&amp;amp;CHR(34)&amp;amp;"http://schemas.xmlsoap.org/soap/envelope/"&amp;amp;CHR(34)&amp;amp;"&amp;gt;"&amp;amp; _ "&amp;lt;soap:Body&amp;gt;"&amp;amp; _ "&amp;lt;Add xmlns="&amp;amp;CHR(34)&amp;amp;"http://te<a href="/tag/mpu/" target="_blank" class="keywords">mpu</a>ri.org/"&amp;amp;CHR(34)&amp;amp;"&amp;gt;"&amp;amp; _ "&amp;lt;a&amp;gt;3&amp;lt;/a&amp;gt;"&amp;amp; _ "&amp;lt;b&amp;gt;4&amp;lt;/b&amp;gt;"&amp;amp; _ "&amp;lt;/Add&amp;gt;"&amp;amp; _ "&amp;lt;/soap:Body&amp;gt;"&amp;amp; _ "&amp;lt;/soap:Envelope&amp;gt;" 'msg<a href="/tag/Box/" target="_blank" class="keywords">Box</a> SoapRequest url = "http://www.v-instru.com/Service1.asmx?methodname=Add" Set xmlDOC =CreateObject("MSXML.DOMDocument") xmlDOC.loadXML(SoapRequest) Set xmlhttp = CreateObject("Msxml2.XMLHTTP") xmlhttp.Open "POST",url,false xmlhttp.setRequestHeader "Content-Type","text/xml;charset=utf-8" 'SOAPAction这个Header头同样可以在sample中找到 xmlhttp.setRequestHeader "SOAPAction","http://te<a href="/tag/mpu/" target="_blank" class="keywords">mpu</a>ri.org/Add" xmlhttp.setRequestHeader "Content-Length",LEN(SoapRequest) xmlhttp.Send(xmlDOC) msg<a href="/tag/Box/" target="_blank" class="keywords">Box</a> xmlhttp.Status msg<a href="/tag/Box/" target="_blank" class="keywords">Box</a> xmlhttp.StatusText msg<a href="/tag/Box/" target="_blank" class="keywords">Box</a> xmlhttp.responseText If xmlhttp.Status = 200 Then 'ok xmlDOC.load(xmlhttp.responseXML) msg<a href="/tag/Box/" target="_blank" class="keywords">Box</a> xmlDOC.getElementsByTagName("AddResult")(0).text else msg<a href="/tag/Box/" target="_blank" class="keywords">Box</a> "<a href="/tag/Failed/" target="_blank" class="keywords">Failed</a>" end if
后来我又测试了另外一个简单的远程主机的WebService(同样基于.Net Framework1.1),使用
http://v-instru.com/blog/posts/233.aspx代码在没有任何修改配置的情况下,status为200,但是responseXML取不到任何值,可以由于.Net Framework1.1不支持HttpGet和HttpPost.如果修改web.config增加HttpPost和HttpGet的支持 &amp;lt;webServices&amp;gt; &amp;lt;protocols&amp;gt; &amp;lt;add name="HttpPost"/&amp;gt; &amp;lt;add name="HttpGet"/&amp;gt; &amp;lt;/protocols&amp;gt; &amp;lt;/webServices&amp;gt; 原始代码可以运行顺利,而利用SOAP发送的情况,在认情况下即可得到支持,因此都可以顺利取得返回值. 问题就在于我最初使用的代码调用local的webservice没有任何问题,而调用实际需要部署机器的时候却一直出错,(此时我利用C#直接调用远程WebService的情况下返回也是正常的),即便此远程主机没有正确配置对于HttpPost和HttpGet的支持,但是否也应该仅仅是取不到返回值呢,就像我上面测试的那样,status返回200,但是取不到responseXML的值,而不是直接返回500错误?或者说某些配置会影响这个需求呢?至今我还是找不到此问题所在. 我想说的是或许你在HttpPost和HttpGet都失败的并且找不到问题所在的时候不妨试试此方法:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐