65.9K
CodeProject 正在变化。 阅读更多。
Home

发现 ISAPI。图形小程序的数据提供程序

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (9投票s)

2002年5月17日

3分钟阅读

viewsIcon

75649

downloadIcon

2339

使用 ISAPI 扩展为图形小程序提供在线数据的示例。

Sample Image - Isapi_Applets.gif

引言

很久以前,我实现了一个从 SQL 数据库到一些图形小程序的数据提供系统。最初,我们认为一个普通的 ASP 脚本可以读取数据并将其提供给小程序。不幸的是,事实并非如此!当站点上的并发用户数超过 80-100 用户,并且用户尝试在小程序中获取大量数据时,Web 服务器会崩溃。因此,我们决定将数据提供迁移到 ISAPI DLL。

优点

  • ASP 服务器将从客户端小程序调用中解放出来。这样,ASP 将只响应普通的站点请求;ASP 不会因小程序调用而产生任何超时。
  • 将数据库连接保留在 ISAPI 缓存中,这样所有对数据库的请求都不会因为打开连接而浪费时间,而是使用公共的打开连接变量(CAdoDatabase m_AdoDB)。
  • 如果您想获得 IIS Web 服务器的最大并发连接数或提供海量 HTML 数据,ISAPI 扩展 DLL 是最佳选择。

功能

ASP 脚本加载 applet 类并为其提供一些参数,例如颜色、HTTP 请求的时间间隔、Web 应用程序 URL 等。

<applet codebase="../AspDemoFeed/Tools/OnlineScroll/CLASSES/JavaScroller/" 
archive="../AspDemoFeed/Tools/OnlineScroll/Scroller.jar" 
code="ScrollerStartUp.class" width="600"
height="20" VIEWASTEXT id="Scroller">
  param name="speed" value="3"
  param name="bgcolor" value="696969"
  param name="Font" value="Arial|1|16"
  param name="changeFontSize" value="11"
  param name="feedURL" value="
  <%=Application("WebURL")%>cgi-bin/IsapiDemoFeed.dll?GetOnlineScrollerData?"
  param name="updateInterval" value="20000"</applet>

Java 小程序将从客户端向 Web 服务器 HTTP 发出请求,使用 received web URL 参数。请求以 updateInterval 参数给出的毫秒间隔进行。如果您在客户端打开 Java 控制台,您会看到一些消息,例如

Loading data from 
https:///projects/Articles/AspDemoFeed/cgi-bin/IsapiDemoFeed.dll?GetOnlineScrollerData?0&4

ISAPI 模块以小程序已知的格式——HTML 流——响应 HTTP 请求。

0|2232160|453.4|2|14:19:06
1|576920|139.1|1|14:19:06
2|4006410|796.8|4|14:19:06
3|2511860|-31.5|2|14:19:06
4|2478810|529.2|0|14:19:06 

对于每个 HTTP 请求,ISAPI 模块会再次使用 CodeProject 网站上的 CAdoDatabaseCAdoRecordset 类向 SQL 数据库发出请求 :)。一个小修改是将数据库连接保持为 public 变量。在每个方法中,都会打开和关闭所需的记录集。一种优化是使用 AdoRecordset 类的 GetString 方法,该方法返回格式化的文本数据。由于 ISAPI DLL 更难调试,因此必须更加注意捕获错误,并使用 try/catch 宏进行处理。

try
{
  CAdoRecordset* AdoRS = new CAdoRecordset;          //create a recordset variable 
  if ( DBConnectionOpen( m_bstrConnectionString ) )  //look at db connection to be online
  { 						                         //open the recordset
    if ( AdoRS->Open(m_AdoDB.GetActiveConnection(), bstrSTMT, adOpenForwardOnly, 
		adLockReadOnly, adUseClient ) )              //here the disc params
    {
      if (!AdoRS->IsEof())                           //look if we have records
        varOutput = AdoRS->GetString("|", "\n", 0 );			
      else
        varOutput = "0 0 0 0 0 ";
      AdoRS->Close();                                //close the recordset 
      if (AdoRS)
        delete AdoRS;
    }
    else                                             //set the custom error
    {
      wsprintf(wcOut,"Encountered Error:<br>%s<br>
      %s<br>%s<br>%s<br>","MyFunction" 
         (LPCTSTR)m_AdoDB.GetLastError(), "RS isnt open", bstrSTMT );
      *pCtxt << wcOut ;
      return;
    } 
  }
  else                                               //set the custom error
  {
    wsprintf(wcOut, "Encountered Error:<br>%s<br>
    %s<br>%s<br>%s<br>","GetMarketMapData", 
    (LPCTSTR)m_AdoDB.GetLastError(), "DB isn't open", bstrSTMT );
    *pCtxt << wcOut ;	
    return;
  }
}
catch(_com_error err)
{ 	
  wsprintf(wcOut, "Encountered Error :<br>
  %s<br>%d<br>%s<br>", (LPSTR)err.Description(), 
     err.Error(), (LPSTR)err.ErrorMessage() );
  *pCtxt << wcOut ;
  return;
}
*pCtxt << varOutput;                                 //here is the output

重要提示:要测试数据提供,您必须更新 tblOnline* 表中的值。更新将立即在线反映在 Online 表和滚动小程序中。要查看其如何与 Intraday charts 小程序一起工作,请向 tblIntraday* 表中插入数据。这些小程序会永久监视这些表,并更新单元格中的值和图表上的点。

Install

  • ASP 连接字符串位于 Includes\_incConnectionOn.asp 文件中。
    cnx.Provider = "sqloledb"
    	cnx.Open "Data Source=andi;Initial Catalog=ArticlesIsapiFeed;", "sa", "" 
  • ISAPI 连接字符串位于 IsapiDemoFeed.cpp 文件的构造函数中。
    m_bstrConnectionString="Provider=SQLOLEDB;Data Source=andi;Initial Catalog=ArticlesIsapiFeed;
    	User ID=sa;Password=;"; 
  • 将 "AspDemoFeed" 文件夹复制到您的网站下,并将其设为 ASP 应用程序,以使会话和
    应用程序 ASP 对象正常工作。
  • 为 "AspDemoFeed" Web 应用程序的 "cgi-bin" 目录授予 "Scripts and Executables" 执行权限。
    这样,IIS Web 服务器将能够执行 IsapiDemoFeed.dll
  • 要在您的 SQL 服务器上安装数据库,请在 SQL Server Enterprise Manager 中选择 "restore database"(还原数据库)选项,然后选择 "DB/ArticlesIsapiFeed.bak" 文件备份。数据库名称为 ArticlesIsapiFeed

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.