webservice.htc的作用---转自CSDN论坛
第一步
WebService.htc文件首先被附加在Web页面的一个元素里。HTML组件(WebService.htc)在内部使用SOAP同服务器上的Web服务进行通信。
下面这一段HTML说明了如何使用样式属性把Web服务行为附加到HTML元素里。(如果你正在使用Visual Studio.NET IDE,那么就要打开.aspx页面并切换到HTML选项卡。)
<div id=divWSBehavior style="behavior: url (webservice.htc)" onresult="GetData()" >
Web服务行为被附加到了隐藏字段txtWSBehavior里。另一个重要的属性是onresult属性。当被调用的方法返回一个结果的时候,onresult事件被这个行为触发。这个属性指向GetData函数。
在onresult事件被触发的时候,GetData就被调用,而且,在这个函数内部,返回的结果就成为可用的了。Onresult事件只对附加有Web服务行为的文档里的对象有效。
以下是一个可能的GetData函数的模板:
<script>function GetData() {if((event.result.error)&&(iCallID==event.result.id)) {var xfaultcode = event.result.errorDetail.code;var xfaultstring = event.result.errorDetail.string;alert("Error");} else{if (event.result.value == 0) {divWSBehavior.innerHTML = "Product By that name does not
exist.";} else if(event.result.value == 0){divWSBehavior.innerHTML = "Error: " + xfaultstring;} else{divWSBehavior.innerHTML = event.result.value;} } }</script>
事件对象可以通过这个函数来访问。这个对象只有在事件期间,也只有在事件句柄里才能够被使用。这里,GetData函数是一个事件句柄。事件对象公开了各种子属性。表A概述了每一个子属性,它们在这个特定的情形里对我们是很有用的。
表A
属性名称描述
event.result.id
它返回唯一一个和方法调用的实例相关联的标识符。
event.result.value
它返回的是方法调用的值。该值的数据类型由服务描述里对方法的定义来决定。
event.result.error
它返回一个布尔函数的真/伪值,用以指明方法的调用是否成功。
event.result.errorDetail.code
它返回一个错误码。
event.result.errorDetail.string
它返回一条错误信息。
只有在错误发生的时候errorDetail对象才是可用的。div标签的innerHTML属性是根据返回的值来进行填充的。
第二步
你必须下载Webservice.htc文件并把它放置到Web页面的文件夹里(虚拟目录)。(你可以在此下载这个文件。)
这一步其实是使用Web服务行为来增强安全的限制方法。HTC仅仅是个脚本,所以使用Web服务行为和在HTML页面里运行脚本是一样安全的。安全级别并不等同于ActiveX控件所提供的安全级别。在同一个Internet域里把HTC文件和Web服务作为HTML页面能够防止其他域使用这个服务。
第三步
在你能够更进一步使用Web服务之前,它必须使用useService方法来启动。做到这一点的理想方法是创建一个InitService函数,并调用主体标签onload事件里的InitService函数,见下面的代码。一旦页面的内容被载入,服务就被启动了。
<script>
function InitService( ){
divWSBehavior.useService("http://localhost/ProductManager/Pricing.asmx?WSDL","ProductPrice");
}
</script>
<body onload=”InitService()”>
</body>
第一个参数是通向带有?WSDL查询字串的Webservice路径。第二个参数是要被启动服务的友好名称。一旦被启动,这个友好名称可以被用作Web服务的参照。
第四步
一旦Web服务被启动,它就能被使用了。你可以像下面这样使用这项服务:
function GetProductPrice( ) {
var sProductName;
sProductName = document.frmServer.txtGetPrice.value;
iCallID = divWSBehavior.ProductPrice.callService("GetPrice",sProductName);
}
callService的第一个参数是Web服务内部的函数名。
样本应用程序
我已经包含一个你可以下载的样本应用程序。它连接到SQL服务器缺省安装的Northwind数据库上。
用户接口有一个文本框,旁边还有一个GetPrice按钮。一旦用户输入了Product名称并点击了GetPrice按钮,价格就从Northwind数据库里的Products表格中被取回。Pricing Web服务的C#代码也被包含在了源代码里,你可以在此下载