在开发Web应用程序时,经常需要调用远程Web服务。在ASP.NET中,这相对容易,因为.NET框架提供了内置支持。然而,在ASP 3.0中调用相同的Web服务则更具挑战性。经过深入研究,发现了三种完全不同的方法可以实现这一目标。
这种方法利用了客户端JavaScript来调用Web服务。以下是一些很好的资源链接:
这是一种最常见且易于使用的方法。但微软建议不要使用它。具体原因请查看以下链接:
微软表示:“SOAPToolkit已经被.NET Framework所取代。SOAP Toolkit的支持将在2005年4月结束,扩展支持将在2008年4月结束。”
尽管如此,对于初学者来说,以下是使用这种技术的方法和代码:
<html>
<head>
<title>使用SOAP Toolkit从经典ASP调用Web服务</title>
</head>
<body>
<%
' 仅处理POST请求
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then
Dim oSOAP
Set oSOAP = Server.CreateObject("MSSOAP.SoapClient")
oSOAP.ClientProperty("ServerHTTPRequest") = True
oSOAP.mssoapinit("http://localhost/Add/SimpleAddService.asmx?wsdl")
Response.write(oSOAP.Add(Request.Form("text1"), Request.Form("text2")) & "<BR>")
End If
%>
<FORM method="POST" name="form1">
输入要相加的两个值。<BR>
<INPUT type="text" name="text1">
<INPUT type="text" name="text2">
<BR><BR>
<INPUT type="submit" value="Add" name="submit1">
</form>
</body>
</html>
这种方法利用了.NET框架和MSXML解析器来在ASP3.0中调用Web服务。以下是示例代码。需要安装.NET框架,可以免费下载。
<html>
<head>
<title>从经典ASP调用Web服务</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 = "http://localhost/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">
输入要相加的两个值
<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请求和响应的示例。需要用实际值替换占位符。
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服务,那么需要构建要发布的请求消息,只有在成功发布后,才能期望得到正确的响应。
这个问题可能已经浮现在脑海中:为什么需要POST方法而不是GET方法?是的,完全可以使用GET方法调用Web服务,但不能通过GET方法传递参数给WEBMETHOD。不明白这怎么可能,但如果有人知道一种技术,请在下面留言告诉,因为非常期待。
以下是构建要发送的HTTP POST数据的代码行:
VBScript
DataToSend = "Val1=" & Request.Form("text1") & "&Val2=" & Request.Form("text2")
这行代码指示要使用的方法是POST,postUrl是要发送请求的URL。
VBScript
xmlhttp.Open "POST", postUrl, false
在这里设置请求头,设置Content-Type。然后发布数据。就是这样,最后使用responseText获取Web服务返回的文本。如果愿意,完全可以将响应内容类型设置为XML,然后使用xmlhttp.responseXml以XML格式获取数据。这完全取决于需求。已经尽力阐述了对这种特定技术的了解。