Win2k3 sp2 w/ii6,python7配置为脚本映射(稍后详细说明)。对于python来说,使用以下代码可以正常工作:
import logging as log
import time
import win32api
LOG_FILENAME="C:\\logs\\iistest.log"
TIME_STEP=.0001
log.basicConfig(filename=LOG_FILENAME,filemode="w",level=log.DEBUG)
try:
win32api.SetConsoleCtrlHandler( \
lambda sig: log.debug("on_exit called with sig [%s]" % str(sig)), True)
log.debug("printing headers...")
# print "Status: 401 Unauthorized"
# print ""
print "Status: 200 OK"
print ""
log.debug("headers printed.")
for i in range(1,11):
time.sleep(TIME_STEP)
log.debug("Tick...(%.4f sec)" % (i*TIME_STEP))
log.debug("Done with main logic.")
except Exception as e:
log.debug("Generic Exception: \n-----\n%s\n-----" % e)
finally:
log.debug("In finally, cleaning up.")
调用http://localhost/webtest/authUrl/iistest.py
会在日志文件中得到一个空白页,如预期的那样
如果我交换print语句,使其执行401
而不是200
,则客户机将获得预期的库存IIS401.5 Authorization failed by an ISAPI/CGI application.
,并且日志文件包含:
DEBUG:root:printing headers...
DEBUG:root:headers printed.
DEBUG:root:Tick...(0.0001 sec)
DEBUG:root:Tick...(0.0002 sec)
DEBUG:root:Tick...(0.0003 sec)
就这样。python.exe
进程已结束。服务器上的错误日志没有任何内容,IIS的传输日志将其正确地记录为401.5
,但没有任何其他指示出错。在
如果我使用py2exe将脚本构建为可执行文件,将其放在子目录中并访问http://localhost/webtest/authUrl/dist/iistest.exe
,则没有问题,代码将以401完成,生成与200相同的日志。在
在WinXP/IIS5计算机上运行了.py脚本映射安装程序,但没有出现问题;执行.py
和401命令完成日志填充。在
这让我怀疑这与应用程序扩展映射.py
到{MetaBase.xml
的相关位:
ScriptMaps=".asa,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE
....
.py,C:\Python27\python.exe -u "%s" "%s",4
在dir设置的地方:
<IIsWebDirectory Location ="/LM/W3SVC/1/ROOT/webtest/authUrl"
AccessFlags="AccessExecute | AccessRead | AccessScript"
AuthFlags="AuthBasic | AuthAnonymous"
>
<Custom
Name="UNCPassword"
ID="3003"
Value="{insertlonghexhere}"
Type="STRING"
UserType="IIS_MD_UT_FILE"
Attributes="INHERIT | SECURE"
/>
</IIsWebDirectory>
<IIsWebDirectory Location ="/LM/W3SVC/1/ROOT/webtest/authUrl/dist"
>
</IIsWebDirectory>
我知道exit处理程序没有启动,但是我已经用CLI上的Ctrl-C验证了它,而且我也不希望它用TerminateProcess触发。在
我很想知道为什么会发生这种情况,没有看到任何关于IIS杀死CGI进程的google信息。我知道我可以通过延迟打印页眉来解决这个问题,但我想了解。有什么提示吗?在
编辑:还注意到这不是完全超时。我可以将一个远程winpdb连接到脚本并逐步执行,在语句之间等待10秒,一旦它超过完成标题的第二次打印,调试器就会失去连接。在
尝试了其他状态代码:
headers printed.
,并且总是无法到达第一个Tick
。在但是,当编译到.exe
并直接运行它时,所有这些都可以正常工作。在
嗯,我在IIS上做了一些perl-CGI工作,但没有python,所以我不能直接帮助您。不过,我对你的元数据库摘录中的“自定义”标记发出了黄旗。UNCPassword属性不应注册为自定义标记。我以前把整个虚拟目录作为海关导入,它们会产生不可预测的结果。祝你好运(4个月后)。在
相关问题 更多 >
编程相关推荐