首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

vb能开发IIS插件吗?该如何解决

2012-12-15 
vb能开发IIS插件吗?vb能开发IIS插件吗?找了半天好像没找到相关的参考资料,不知道VB行不行呢谢谢[最优解释]

vb能开发IIS插件吗?
vb能开发IIS插件吗?
找了半天好像没找到相关的参考资料,不知道VB行不行呢
谢谢
[最优解释]
你说的如果是ISAPI的话,VB官方是不支持的。因为VB缺乏制作标准DLL的能力。或许有Hack的办法,不过不建议你在生产环境中尝试。

如果有可能的话,使用Visual C++ 6.0(专业版或者企业版),提供了对ISAPI的支持。
[其他解释]
这个用VC更合适。
[其他解释]
查了下,用VB好像确实不行
[其他解释]

引用:
查了下,用VB好像确实不行

当然有变通的方法:用C++编写一个ISAPI框架,把主要的逻辑放在一个VB写的COM DLL里面,让VC调用。
[其他解释]
严格地说,ASP脚本也可以算ISAPI插件——微软用C++写了ASP引擎(当然现在是内置在IIS里面,早期是作为插件的),而这个引擎本身没有什么实质的业务逻辑,它再调用ASP脚本完成相应的功能。
[其他解释]
VB是可以写出ISAPI的接口程序的(CGI模式),但是因为资源控制是VB的缺陷之一,没办法很好的控制住VB程序占用的内存和CPU使用率(VB的运行库),所以,即使写出来了也不见得能在实际应用中长期运行。如果想深入ISAPI接口,最好还是用C++ 或直接支持 Win32 SDK 开发方式的开发工具,否则这种CPU资源与内存分配的问题肯定是个大问题。

曾经我就用VB写过IASPI的接口程序,做了一个图片下载处理程序。但是最后还是因为内存和CPU占用过高等问题没有投入实际使用。因为用VB做出来的ISAPI接口是以CGI方式接口,每一次触发接口都是以进程为单位调用的。而每一个VB进程一启动最少要占个4-5MB的内存空间。这么计算,如果一个远程调用占用4MB,最多的同时连接数为几千个就把内存占用完了(具体看内存大小),然而,通常一个完整的 VB CGI 程序运行时对于内存的占用肯定超过很多,几MB甚至十几MB都可能(根据工程代码而言),所以吞噬完系统内存的速度可能很快。如果做的接口是jpg、gif、bmp等图片文件的接口,一个网页内可能就包含几十上百的文件,当IE取得HTM内容后,就会分析URL,采用多线程方式提交连接请求,这就意味着IIS在一两秒要处理一个或多个用户的可能几十个请求,就按4MB算,5个用户,同一个网页入口,包含20张图片文件,系统就要消耗 5*(20*4MB)=400MB内存,如果多几个用户访问呢?包含的图片量再大点呢?程序占用不止4MB呢?问题就更大了,系统都会跑死掉。

但别人的ISAPI又是如何跑的呢?
首先,别人的ISAPI是做指定格式的脚本分析的处理,这样就不会像图片这么夸张,经常一个用户需要同时处理几十个接口,再者是统一线程池管理,注意是“线程池”,不是“进程池”,因为进程在创建时需要加载很多DLL资源(比如VB的运行库和系统的API函数库),而每个进程都可以有多个线程,这些线程就可以基于这个进程的资源调用相关库函数地址执行程序和访问资源。因为线程是共享进程资源,所以就少了重复资源加载的情况,自然内存就节约了,而且节约的不是一点,是很多,再加上对所有的线程进行任务和队列管理,更有效的节约CPU使用情况。即使再多的请求,无非是放在任务队列中有效的按序按量执行,不会对系统造成多大的资源开销。

但是VB不支持API形式的动态库编译,也就没有办法写出标准的ISAPI接口,只能做类似EXE程序的CGI接口,这种多线程的模式就没办法实现。即使能实现,VB的线程也不是那么好管理的,因为VB有VB的运行库,这些运行库包管了VB的线程处理接口,与标准 Win32 SDK 的线程使用是有一点区别的,因为资源地址需要转换才能使用(这个可能有点难理解,涉及就比较深了),所以VB来开发这种ISAPI接口不是很合适,玩玩是可以,实际应用开来是没希望了。

热点排行