用IE的Web服务建立ASP.NET应用程序
接着把SqlDataAdapter对象的SelectCommand属性设置为前面建立的SqlCommand对象:
adapter.SelectCommand = command;
现在使用Fill方法,通过在数据源上执行前面指定的SQL语句从数据源检索数据:
//用存储过程返回的值填充数据集 adapter.Fill(employeeDataset,"Employees" );
一旦雇员信息成为数据集形式的,你就可以检索它的内容,并把它作为参数传递到XmlDocument对象的LoadXml方法中。最后,把该XmlDocument对象返回到该Web服务的调用者:
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(employeeDataset.GetXml()); return xmlDoc; } catch (Exception ex) { throw ex; }
在最后的代码块中,你检查了State属性以验证Connection(连接)是否仍然是打开的。如果连接仍然是打开的,你就通过调用该连接对象的Close方法关闭它:
finally { if (sqlConnection.State == ConnectionState.Open) { sqlConnection.Close(); } } }
现在你已经建立了Web服务了,可以用鼠标右键点击EmployeeService.asmx文件并选择Build(建立)和Browse(浏览)来测试它的功能。
在ASP.NET页面中如何使用Web服务行为调用Web服务
在Web页面中使用Web服务行为的第一步是使用类似下面的语法把它嵌入页面代码:
<div id="service" style="BEHAVIOR:url(WebService.htc)"></div>
上面的代码依赖IE 5(及以上版本)内建的行为功能来验证JavaScript文件的位置,而该文件被用于调用Web服务。前面谈到,webservice.htc文件的位置必须与Web页面的文件夹相同。我们要重点注意,行为文件的载入发生在客户端而不是服务器上。
在嵌入了上面的代码后,我们就可以使用JavaScript代码调用行为并把它链接到兼容WSDL 1.1的Web服务了。这是通过引用被嵌入的行为id(前面代码中的服务)和调用它的useService方法来实现的:
service.useService("http://localhost/MyProjects/
WebServiceBehavior/EmployeeService.asmx?WSDL","sVCEmployee");
你需要在页面的onLoad事件句柄中调用useService方法,这样才能确保在调用Web服务的任何方法之前,该Web服务已经映射了。
UseService方法有下面两个参数:
· Web服务的WSDL文件的路径。
· 用于以后引用该Web服务的一个"友好的"名字。每次使用行为调用EmployeeService.asmx文件中的方法的时候都会使用这个名字。
现在已经建立了Web服务并可以访问它了。异步调用Web服务方法可以分为两个步骤。异步调用的优点是Web页面不用等待Web服务返回。第一步,你调用Web方法并把回调(callback)函数作为参数。第二步,在执行了需要的方法后,Web服务返回,启动回调函数。
下面是完整的源代码列表:
<%@ Page language="C#" Codebehind="EmployeeServiceClient.ASPx.cs" AutoEventWireup="false" Inherits=" EmployeeWebServiceClient.EmployeeServiceClient" %> <HTML> <HEAD> <title>Employee Details</title> <SCRIPT LANGUAGE="JScript"> //定义一个模块级的变量来捕捉事件id var iCallID ; function GetEmployeeDetails() { // 调用svcEmployee Web服务的GetEmployeeDetails方法 iCallID = service.svcEmployee.callService(DisplayResults,
"GetEmpDetailsByEmpID",txtEmployeeID.value); } function DisplayResults(result) { var strXML,objXMLNode,objXMLDoc,objEmployee,strHTML; //检查事件id是否相同 if (iCallID != result.id) return; if(result.error) { // 显示错误信息 var faultCode = result.errorDetail.code; var faultString = result.errorDetail.string; alert("ERROR: Code = " + faultCode + ", Fault String=" + faultString); } else { //把结果值赋予本地变量 objXMLNode = result.value; objXMLDoc = new ActiveXObject("Microsoft.XMLDOM"); //把返回的XML字符串载入XMLDOM对象 objXMLDoc.loadXML(objXMLNode.xml); //得到Employees节点的指针 objEmployee = objXMLDoc.selectSingleNode("GetEmpDetailsByEmpIDResult").selectSingleNode
("EmployeesRoot").selectSingleNode("Employees"); //检查从服务器返回的雇员指针是否有效 strHTML = "<font color=’#0000FF’>"; if (objEmployee != null) { //动态生成HTML,并把它添加到一个字符串变量中 strHTML += "<br><br>Employee ID :<b>" + objEmployee.selectSingleNode("EmployeeID").text + "</b><br><br>"; strHTML += "Employee First Name :<b>" + objEmployee.selectSingleNode("FirstName").text + "</b><br><br>"; strHTML += "Employee Last Name :<b>" + objEmployee.selectSingleNode("LastName").text + "</b><br><br>"; strHTML += "Employee Title :<b>" + objEmployee.selectSingleNode("Title").text + "</b><br><br>"; strHTML += "Employee Title :<b>" + objEmployee.selectSingleNode("Title").text + "</b><br><br>"; strHTML += "Title Of Courtesy:<b>" + objEmployee.selectSingleNode("TitleOfCourtesy").text + "</b><br><br>"; strHTML += "Postal Code:<b>" + objEmployee.selectSingleNode("PostalCode").text + "</b><br><br>"; } else { strHTML += "<br><br><b>Employee not found</b>"; } strHTML += "</font>" //把动态生成的HTML赋予div标记 divContents.innerHTML = strHTML; } } function init() { // 建立Web服务的实例并把它叫做svcEmployee service.useService("http://localhost/MyProjects/15Seconds/WebServiceBehavior/_ EmployeeWebService/EmployeeService.asmx?WSDL","svcEmployee"); } </SCRIPT> </HEAD> <body onload="init()"> <div id="service" style="BEHAVIOR: url(webservice.htc)"></div> <H1 align="center"> <font color="#800080">Employee Details</H1> </FONT> <br><br> <P align="left"> <font color="#800080"><b>Enter the Employee ID:</b></font> <INPUT id="txtEmployeeID" name="txtEmployeeID" style="LEFT: 149px; TOP: 72px"> <INPUT id="btnAdd" type="button" value="Get Employee
Details" name="btnGetEmployee" onclick="return GetEmployeeDetails()"> </P> <P></P> <div id="divContents"> </div> <P></P> </body> </HTML>
在GetEmployeeDetails方法中,你通过把回调方法名称和输入参数作为参数传递给Web服务来调用该Web服务的web方法。这是通过调用Web服务行为的callService方法实现的:
function GetEmployeeDetails() { // 调用svcEmployee web服务的GetEmployeeDetails方法 iCallID = service.svcEmployee.callService(DisplayResults,"GetEmpDetailsByEmpID",txtEmployeeID.value); }
0
相关文章