Web service的dll(ISAPI/NSAPI)文件部署在一台Web服务器上的IIS上(100分)

  • 主题发起人 主题发起人 厦门的夏天
  • 开始时间 开始时间

厦门的夏天

Unregistered / Unconfirmed
GUEST, unregistred user!
我用D7做的Web service的dll(ISAPI/NSAPI)文件部署在一台Web服务器上的IIS上,

客户通过软件链接该dll文件上传数据到SQL server上,

现在发现如果上传的次数多了,则会无法链接该dll文件(wsdl检验如,http://www.asd.com/vv/sasd.dll/wsdl)

也就无法使用Web Service了,不知是不是dll占用IIS内存没有释放,不知大家有没有这方面的经验,

IIS上是不是有什么特别设置或程序本身要注意哪些问题!

请各位不吝指教!
 
正在做WebService帮顶
 
由于DLL类型的应用程序在被WEB服务器加载之后会一直存在存储器中,直到WEB服务器释放这个DLL为止,因此ISAPI/NSAPI的WEB应用程序在服务每个HTTP要求时,加载/激活成本低,但是在存取数据库的时候必须进行连接,而且ISAPI/NSAPI的WEB应用程序是执行在WEB服务器相同的空间中,因此它要是发生错误将造成整个WEB服务器执行的不正常,特别是用与2层与3层系统中。本人建议使用中间件来处理DLL,而WEB服务器则负责客户HTTP请求,这样就能大大改善WEB服务器的性能,与数据库服务器的连接速度也能由你所使用的数据库提供的pooling功能决定,因而能大大提高你的服务器的访问量与速度。
最后,还建议使用SOAP/XML来提供接口,能提供多类型的服务。
好了,给分吧!
 
to mmqq0312@tom.com,
我把enable去掉有用吗?
高速缓存 ISAPI 扩展
可以加载和缓存 ISAPI DLL,以便处理进一步的请求时不用再次调用它们。否则,DLL 将在运行之后被卸载。缓存减少了用户等待加载 DLL 的时间。大多数 ISAPI 扩展(包括 Active Server Pages)都受益于缓存。只有在特定环境下,如调试 ISAPI 扩展,才可以清除该选项。

要启用高速缓存

在 Internet 信息服务管理单元中,选择 Web 站点或应用程序的起始点目录。
打开目录的属性表,然后单击“主目录”、“虚拟目录”或“目录”选项卡。
单击“配置”按钮。
单击应用程序映射选项卡,然后选择“高速缓存 ISAPI 扩展”复选框。
 
启用高速缓存ISAPI 扩展并没有彻底解决你的问题,无论怎么启动高速缓存或是其他方式你的ISAPI DLL都是运行在你的存储器中。归根结底如果你的DLL代码有问题的话很可能早成服务器崩溃,我提议的使用中间件就是为了暂时解决这个问题,万一出错WEB服务器还可以继续响应客户的请求,只是中间件如MTS处于繁忙状态,此时解决问题就能集中在中间件上,不是大大减小了解决问题的难度跟范围了吗?
你说的方法也不是不可行,这只是暂时提高WEB处理速度或提高了响应客户请求的限度,万一代码有点小问题就会继续出现上述情况。根本解决问题还是多方面的。代码的严格编写,系统架构的合理等。很高兴大家能一起讨论系统架构的问题!本人认为一个好的系统架构是最重要的!
 
to:mmqq0312@tom.com,
我的意思是不启用高速缓存,因为启用缓存可能会一直占用内存,导致web崩溃
 
不起用高速缓存改变不了多少。只要是DLL就会占用存储器。
 
现在流行的是把客户请求打包通过SOAP/XML来与WEB通信,考虑一下!
 
我的软件就是通过打包客户的数据到xml文件,再利用web service读该文件写到sql server上,但xml有可能有一M
 
只能说两全不能其美了!
可以考虑分段传输。前段时间看了个新思路是当客户端提出要求时会找wsdl文件,如果把wsdl文件存在客户机上速度会快10倍以上。还没试过,夏天可以试试,同时XML文件会小很多。
 
to:mmqq0312@tom.com,
那种方法安生性不太好吧,我想问你怎么释放dll在iis上占的内存,因为我重启iis后又可以用!
 
DLL运行后会一直占用内存,释放只能是等线程结束了。具体怎么操作我也没有经验。
 
to:mmqq0312@tom.com,
那怎么会拖kuaWeb服务呢,是我程序有问题吗,怎么能检查到呢?
 
我也正在写WEB SERVICE,不知道会不会碰到夏天兄这个问题。

怎么把客户请求打成XML的包啊???
 
一般都是DLL出现问题的比较多,编写DLL要很小心,而且要很认真很严格的测试,我想大概就是DLL本身的问题。至于怎么打包成xml,网上有很多,Delphi里也有打包的控件。
 
大家有没有出现过此问题
 
在D7中dll的动态加载会作成内存泄露,重复几次就会用去很多内存
 
不用那么复杂。这肯定是因为你的数据库联接没有被释放。在Web Service中写程序要请求一次申请一次连接,用完之后必须马上释放,否则IIS会将它放在session中,多次之后服务器必然不堪重负。
 
呵呵.不是内存释放的问题,如果内存释放不全的话,表现方式应该是内存一直上涨.

我碰到过类似的现象,不过是双cpu造成的,并咨询过中国微软技服.
 
to:花形,
是同步双CPU服务器,为什么会赞成这种现象呢?
 
后退
顶部