我已经被IIS7.5弄疯了。。。求救!!!
从2003升级到2008,IIs6升到II7.5,麻烦一个接一个的来。。开发工具是vs2010 框架4.0
我写了一个httpHandlers,来接管对*.doc的GET PUT LOCK UNLOCK等请求。
在IIS中,添加处理程序映射。将路径为 *.doc 谓词为GET, PUT, UNLOCK, LOCK, OPTIONS 的请求交给我来处理。
例如:
GET http://localhost/sql/2/33.doc
当路径是“sql”时,从数据库中读取id为2的数据返回客户。
GET http://localhost/upfile/1.doc
当路径不是“sql”时,就读取物理路径中的文件返回客户。
问题出来了:
网站里 sql 这个目录是不存在的,所以GET 方法成功了。
但是 upfile 这个虚拟目录是存在的,并且因为这个目录是网站的上传目录,所以没有脚本权限。这时GET 方法就失败了,错误原因就是 因为这个目录是没有执行权限的。
============================================================
而PUT 方法 也不行,根本就没有经过httpHandlers,就直接说403 禁止访问: 访问被拒绝了。
而我的PUT方法,就把 路径是sql的写入数据库,不是sql就写入磁盘。
我的工程是vs 2010上,调试成功,在iis6下也运行良好,但是iis7上就不可以了。
因为在iis6上的映射有一个“确定文件是否存在”的选项!
--------------------编程问答-------------------- 问题难点,没人会了? --------------------编程问答-------------------- 错误追踪:
ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 403
HttpReason Forbidden
HttpSubStatus 0
ErrorCode 0
ConfigExceptionInfo
Notification EXECUTE_REQUEST_HANDLER
ErrorCode 操作成功完成。 (0x0)
应该是: PUT操作是不被允许的,虽然我在system.webServer的 handlers 里设置了verb=PUT 但是还是不行。
在ManagedPipelineHandler这个模块里直接就否决了,还轮不到我做,估计是要设置一下什么。 --------------------编程问答-------------------- 木有权限? --------------------编程问答-------------------- 1.对于Uplaod文件夹,你不要进行 httpHandlers 处理
2,确保Uplaod文件夹有匿名帐号读取权限,也就是文件夹属性-安全性里面
3,web.config里面没有启用匿名帐号不允许访问,登录过的另说
4,iis7.5有经典模式和集成模式2种,试着改改测试下 --------------------编程问答--------------------
对于有目录的.doc文件我已经找到解决办法了,就是在path里用通配符避开就可以了。
现在的问题是 PUT 操作,不行。
word在线编辑后,点保存,就会向我的web发 put操作。
我根据put 来的地址 来分析 需要存放到sql中的哪条数据库里。 这些操作在iis6和vs2010自带的服务器中表现良好,但在iis7.5中却易做图了。
找了很多资料都是英文,因为我英语不好,所以只看懂了大概:也就 iis7.5 默认不允许put操作,需要怎么设置我没找到或者说我没看懂。
所心我来我们中文社区发贴 求助一下。
具体情况就是这样了,错误追踪在3楼。 --------------------编程问答-------------------- 添加doc扩展名,选择全部动作
类似aspx --------------------编程问答--------------------
关注试试 --------------------编程问答-------------------- 算了,翻了一下午的字典,问题找到了。
IIS7+ 中要想使用PUT DELETE动词,必须安装webdav,并且必须进行身份验证。
要绕过验证,就必须写isapi扩展(性能最高)或托管模块,来伪装验证,这样你的网站才能使用PUT等动词。。
我无语了。 --------------------编程问答-------------------- 好好的 http://localhost/sql/default.aspx?a=2&b=33.doc 多顺溜,偏要自己搞个伪娘,何必呢?
我对所谓“我写了个httpHandlers然后配置了IIS”的人本身没有好感。 --------------------编程问答--------------------
首先:Word的保存不支持?后面的参数,其次用word打开http://localhost/sql/default.aspx?a=2&b=33.doc 他会将文件下载到本地后打开,不能达到在线编辑的目的。
而要想word达到在线编辑的目的,就必须使用webdav协议,而iis6自带的webdav协议如果用身份验证,那么对众多不同等级,不同权限的用户的配置登陆,以及与网站其它功能的集成存在太多的困难和不便。如果用匿名的话就涉及到安全问题。
那么能想到的解决办法就是,自己模拟一个webdav服务器,通过在httpHandlers里对 GET PUT OPTION LOCK UNLOCK 这5个动词的处理,就可以很好处理在线打开,在线保存功能。
因为 word 是不接受cookies,并且他和浏览器不在同一个session里,所以身份验证就存在问题,毕竟你能改变自己的程序,但你却不能改变word.
解决的办法就在url里 以路径的方式传递身份验证问题。
说了这么多,就是想让你知道,简单能处理的问题无人想复杂化,特别是我们这种靠时间吃饭的。
你的好感观应该变变了。
--------------------编程问答-------------------- 还没有用过7.5,愿楼主早点解决问题。 --------------------编程问答-------------------- 楼主是个跟得上时代步伐的人。。。 --------------------编程问答-------------------- 谁有弄好,介绍一下方法,我也卡在这里 --------------------编程问答--------------------
是呀。
--------------------编程问答-------------------- 越觉着别扭的解决办法,都不是好的方案,楼主的情况肯定还有更好的办法 --------------------编程问答-------------------- 谁让你搞的那么先进呢? 哎!!!!!!!!!!!!!!!!!
补充:.NET技术 , ASP.NET