WebService.htc文件应用

来源:互联网 发布:淘宝网电脑客户端 编辑:程序博客网 时间:2024/05/22 16:39
第一步  
   
  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#代码也被包含在了源代码里,你可以在此下载