从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上的映射有一个“确定文件是否存在”的选项!

解决方案 »

  1.   

    错误追踪:
    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.   

    1.对于Uplaod文件夹,你不要进行 httpHandlers 处理
    2,确保Uplaod文件夹有匿名帐号读取权限,也就是文件夹属性-安全性里面
    3,web.config里面没有启用匿名帐号不允许访问,登录过的另说
    4,iis7.5有经典模式和集成模式2种,试着改改测试下
      

  3.   

    对于有目录的.doc文件我已经找到解决办法了,就是在path里用通配符避开就可以了。现在的问题是 PUT 操作,不行。word在线编辑后,点保存,就会向我的web发 put操作。我根据put 来的地址 来分析 需要存放到sql中的哪条数据库里。 这些操作在iis6和vs2010自带的服务器中表现良好,但在iis7.5中却罢工了。找了很多资料都是英文,因为我英语不好,所以只看懂了大概:也就 iis7.5 默认不允许put操作,需要怎么设置我没找到或者说我没看懂。所心我来我们中文社区发贴 求助一下。具体情况就是这样了,错误追踪在3楼。
      

  4.   

    添加doc扩展名,选择全部动作
    类似aspx
      

  5.   

    算了,翻了一下午的字典,问题找到了。IIS7+ 中要想使用PUT DELETE动词,必须安装webdav,并且必须进行身份验证。要绕过验证,就必须写isapi扩展(性能最高)或托管模块,来伪装验证,这样你的网站才能使用PUT等动词。。我无语了。
      

  6.   

    好好的 http://localhost/sql/default.aspx?a=2&b=33.doc 多顺溜,偏要自己搞个伪娘,何必呢?我对所谓“我写了个httpHandlers然后配置了IIS”的人本身没有好感。
      

  7.   


    首先: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里 以路径的方式传递身份验证问题。
    说了这么多,就是想让你知道,简单能处理的问题无人想复杂化,特别是我们这种靠时间吃饭的。
    你的好感观应该变变了。