从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上的映射有一个“确定文件是否存在”的选项!
开发工具是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这个模块里直接就否决了,还轮不到我做,估计是要设置一下什么。
2,确保Uplaod文件夹有匿名帐号读取权限,也就是文件夹属性-安全性里面
3,web.config里面没有启用匿名帐号不允许访问,登录过的另说
4,iis7.5有经典模式和集成模式2种,试着改改测试下
类似aspx
首先: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里 以路径的方式传递身份验证问题。
说了这么多,就是想让你知道,简单能处理的问题无人想复杂化,特别是我们这种靠时间吃饭的。
你的好感观应该变变了。