isapi 数据流长时间没返回的一个bug

用Delphi2010+intraweb开发,利用

response.contentstream:=astream;

response.sendresponse;

返回数据流到客户端。

先发现一个问题:

exe中运行正常。而编译成isapi的dll后,从firebug可以看到,数据一直没有到,最后超时。

跟踪断点进去,发现代码都已经执行完成了,甚至返回了,可是,还是等待数据超时。

解决办法:

生成astream后,设置astream.position:=0,也就是把要返回的流复位。

delphi 调试isapi dll的方法

一般Delphi中,写isapi的方法都是,先建立一个cgi的工程,编程,调试,程序调试完成后,再修改成isapi的工程,重新编译成dll,然后部署到iis上。但是,这样有个问题,有时候cgi和isapi的处理方式还是有些区别的,这样,某些问题就无法发现。比如说,在cgi的exe中,post的数据和url中的参数数据,就可以用contentfields和queryfields获取,而isapi中,就必须严格按照,参数用queryfields,而post的数据用contentfields获取。

设置isapi的方法,就是利用调试时的attach to process的方法,把dll调试进程attach到iis的可执行程序w3wp.exe进程,网上有些文章说是inetsrv.exe,是错误的。

image

继续阅读

intraweb编译的isapi在IIS6 上乱码问题

新装的win2003,原来在xp上跑的好好的intraweb 编译的isapi 的dll,出现了一堆乱码。

查看页面的源代码,就是

<html><head><script>
function IWTop(){
  if ((parent != self) && (parent != null) ) {
    try {
      return parent.IWTop();
    } catch (e) {
      return window;
    }
  } else {
    return window;
  }
}
IWTop().document.writeln('?佄呃偙?瑨汭倠?????????堠呈?ㄠ?吠慲獮瑩潩慮???∠瑨灴?眯睷眮?牯?剔砯瑨汭?呄?桸浴?琭慲獮瑩潩慮?瑤≤??瑨汭砠汭獮∽瑨灴?眯睷眮?牯???砯瑨汭??格慥??洼瑥?瑨灴攭畱癩∽敒牦獥?挠湯整瑮∽?甠汲???潌楧?汤????洼瑥?瑨灴攭畱癩∽潃瑮湥?祔数?潣瑮湥?琢硥?瑨汭※档牡敳?呕?????楴汴????????楴汴??猼祴敬琠灹?琢硥?獣? ̄?挣湥整???潰楳楴湯愺獢汯瑵??眊摩桴??硰※?敬瑦?┰※?潴????稊椭摮硥?※?慢正牧畯摮挭汯牯????※?慭杲湩氭晥???硰?琊硥?污杩?散瑮牥?昊湯?敷杩瑨?戠汯??潢摲牥?硰猠汯摩???敦?洊牡楧?潴??瀲????????猯祴敬 ̄??敨摡??潢祤??楤?摩∽散瑮牥??搼癩猠祴敬∽慰摤湩??硰???楤?瑳汹?昢湯?楳敺?瀲??敓獳潩?螿鳦?搯癩??牨????瑳汹?挢汯牯????昻湯?楳敺?瀲??臥芦???覜蟨???????苧?愼栠敲????潌楧?汤????貇????????楤???楤???潢祤??栯浴??

已经设置了脚本和运行权限了。

后来,写了另外一个小的dll,才发现

原来是临时目录的权限不对,临时目录是在C:windowsTemp

解决办法:

右键C:windowsTemp,共享和安全

image

添加everyone用户,设置权限为可修改和写入

重启iis即可。