当前位置:编程学习 > C#/ASP.NET >>

我已经被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种,试着改改测试下 --------------------编程问答--------------------
引用 4 楼 net_lover 的回复:
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 --------------------编程问答--------------------
引用 6 楼 net_lover 的回复:
添加doc扩展名,选择全部动作
类似aspx

关注试试 --------------------编程问答-------------------- 算了,翻了一下午的字典,问题找到了。

IIS7+ 中要想使用PUT DELETE动词,必须安装webdav,并且必须进行身份验证。

要绕过验证,就必须写isapi扩展(性能最高)或托管模块,来伪装验证,这样你的网站才能使用PUT等动词。。

我无语了。 --------------------编程问答-------------------- 好好的 http://localhost/sql/default.aspx?a=2&b=33.doc 多顺溜,偏要自己搞个伪娘,何必呢?

我对所谓“我写了个httpHandlers然后配置了IIS”的人本身没有好感。 --------------------编程问答--------------------
引用 8 楼 surnde 的回复:
算了,翻了一下午的字典,问题找到了。

IIS7+ 中要想使用PUT DELETE动词,必须安装webdav,并且必须进行身份验证。

要绕过验证,就必须写isapi扩展(性能最高)或托管模块,来伪装验证,这样你的网站才能使用PUT等动词。。

我无语了。


首先: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,愿楼主早点解决问题。 --------------------编程问答-------------------- 楼主是个跟得上时代步伐的人。。。 --------------------编程问答-------------------- 谁有弄好,介绍一下方法,我也卡在这里 --------------------编程问答--------------------
引用 6 楼 net_lover 的回复:
添加doc扩展名,选择全部动作
类似aspx

是呀。
--------------------编程问答-------------------- 越觉着别扭的解决办法,都不是好的方案,楼主的情况肯定还有更好的办法 --------------------编程问答--------------------  谁让你搞的那么先进呢? 哎!!!!!!!!!!!!!!!!!
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,