从 ASP3.0 和 JavaScript 调用 WebService






4.66/5 (10投票s)
2005年6月24日
3分钟阅读

201511
从 ASP3.0 和 JavaScript 调用 WebService
引言
我不知道是否有人遇到过这个问题,但我们当时深陷困境。问题是创建一个 Web 服务,并从 ASP.NET 和 ASP 3.0 中使用它。
创建 Web 服务并在 ASP.NET 中使用它很简单,因为 .NET 提供了固有的支持。有趣的部分是在 ASP 3.0 中使用相同的 Web 服务。
经过一番研究,我找到了三种完全不同的方法来实现这一点。
- 使用客户端 JavaScript
- 使用 Microsoft SOAP Toolkit 2.0
- 使用 .NET Framework 和 MSXML 解析器(我使用的方法)
使用客户端 JavaScript
我遇到了一些关于这种方法很好的资源。 以下是链接
使用 Microsoft SOAP Toolkit 2.0
这项技术是最常见,最普遍的方式,也最容易使用。但是 Microsoft 建议不要使用它。请查看这个链接。
他们说的是
“.NET Framework 已经减少了 SOAP Toolkit。 SOAP Toolkit 支持将于 2005 年 4 月停用,扩展支持将于 2008 年 4 月停用。”
对于尚未入门的人,这里是使用这项技术的“如何做”和“代码”
<html>
<head>
<title>Calling a webservice from classic ASP, using the SOAP Toolkit</title>
</head>
<body>
<%
‘Only to process a Post Request
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then
Dim oSOAP
'Create an object of Soap Client
Set oSOAP = Server.CreateObject("MSSOAP.SoapClient")
oSOAP.ClientProperty("ServerHTTPRequest") = True
'Initialize the Web Service
oSOAP.mssoapinit("https:///Add/SimpleAddService.asmx?wsdl")
'Invoke the Web Service
Response.write(oSOAP.Add(Request.Form("text1"), _
Request.Form("text2")) & "<BR>")
End If
%>
<FORM method=POST name="form1">
Enter the two Values to be Added.<BR>
<INPUT type="text" name="text1">
<INPUT type="text" name="text2">
<BR><BR>
<INPUT type="submit" value="Add" name="submit1">
</form>
</body>
</html>
使用 MSXML 解析器
这项技术利用 .NET framework 和 MSXML 解析器在 ASP 3.0 中调用 Web 服务。 以下是示例代码。 您需要安装可以免费下载的 .NET framework。
<html>
<head>
<title>Calling a webservice from classic ASP</title>
</head>
<body>
<%
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then
Dim xmlhttp
Dim DataToSend
DataToSend="Val1="&Request.Form("text1")&"&Val2="&Request.Form("text2")
Dim postUrl
postUrl = " https:///Add/SimpleAddService.asmx/Add"
Set xmlhttp = server.Createobject("MSXML2.XMLHTTP")
xmlhttp.Open "POST",postUrl,false
xmlhttp.setRequestHeader "Content-Type", _
"application/x-www-form- urlencoded"
xmlhttp.send DataToSend
Response.Write(xmlhttp.responseText)
End If
%>
<FORM method=POST name="form1">
Enter the two Values to be Added<BR>
<INPUT type="text" name="text1">
<INPUT type="text" name="text2">
<BR><BR>
<INPUT type="submit" value="Add" name="submit1">
</form>
</body>
</html>
我需要在这里解释一些事情。
HTTP POST
以下是示例 HTTP POST 请求和响应。 显示的占位符需要替换为实际值。
POST /Add/SimpleAddService.asmx/Add HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: length
Val1=string&Val2=string
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">string</string>
您在上面看到的是,如果您使用 HTTP POST,则需要发出请求并获得对 Web 服务的响应的方式。 那么,我为什么要向你解释这个呢? 这是因为,如果我们想使用 XMLHTTP 调用 Web 服务,那么我们需要构建要发布的Request
消息,并且只有在成功发布后,我们才能期望得到正确的响应。
在中间,我错过了一件重要的事情。 这个问题可能已经在你的脑海中闪过,为什么我们需要POST
方法,而不是GET
方法? 是的,我们可以很好地使用GET
方法调用 Web 服务,但我无法使用GET
将参数传递给WEBMETHOD
。 我不明白这怎么可能,但如果有人知道一种技术,请在下面留下评论来告诉我, 因为我真的很期待。
这就是关键。
DataToSend="Val1="&Request.Form("text1")&"&Val2="&Request.Form("text2")
这是我们构建要在 HTTP POST
中发送的数据的行。
xmlhttp.Open "POST",postUrl,false
此行指示要使用的方法是POST
,而postUrl
是要将请求发送到的 URL。
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
我们在这里设置请求标头,设置Content-Type
。
然后发布数据。 就是这样,最后,我们使用responseText
来获取从 Web 服务返回的文本。 如果您愿意,您可以很好地将响应内容类型设置为 XML,然后使用xmlhttp.responseXml
以 XML 形式获取数据。 这完全取决于您的需求。 我已经尽力解释了我对这项特殊技术的理解。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。