面向服务开发越来越普及的今天,使用WebService、WCF、WebAPI和ServiceStack一类SOA开发的项目越来月火,使用SOA面向服务开发时候通常要启用HTTP的GET POST之外的其他谓词,比如PUT、DELETE,而默认情况下IIS7是不开启其他谓词的,这样做好的服务就被屏蔽掉,不能被外部访问了(开发时候没有使用IIS,所以不存在这个问题)。


    于是乎找了不少网上资料,包括了外文的,解决方式基本就是两种方式,这里转载一下找到的资料:

      来自一个中文博客的,作者dwtedx


-------转载开始 {---------------------------------------------


问题描述:

使用WCF 4.0 开发REST服务、部署到windows 7 64位 IIS 7.5 (应用程序池选择的是ASP.NET V4.0) 上

GET、POST方式都能成功、但是PUT,DELETE报错

HTTP 错误 405.0 - Method Not Allowed 无法显示您正在查找的页面

因为使用了无效方法(HTTP 谓词)

但是如果使用VS2010 调试模式、GET、POST、PUT、DELETE都成功

这说明代码本身没有任何问题、 问题出在IIS 7.5 设置上


解决方案:

一、如果是处理程序里没有相关后缀

1.处理程序映射

2.添加脚本映射

3.请求路径:*.html

4.可执行文件:C:/windows/system32/inetsrv/asp.dll

5.请求限制-谓词:输入需要允许请求的谓词(POST,GET,PUT)

6.输入名字后保存

7.重启站点


二、如果处理程序有相关后缀

1.处理程序映射

2.找到脚本映射

3.如:请求路径:*.ashx

4.请求限制-谓词:输入需要允许请求的谓词(POST,GET,PUT)

5.输入名字后保存、如:DELETE

6.重启站点

更多方案:

我在网上找到了另外的解决方案、我没有测试过

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

页面标题:IIS7 HTTP 405 Method Not Allowed_PUT and DELETE me_dwtedx博客

来源网址: http://dwtedx.sinaapp.com/itshare_112.html

-----------转载结束  }---------------------------------------------------------


另一篇博文中说明的更明晰,


-------转载开始 {---------------------------------------------

来源网址:http://www.cnblogs.com/shanyou/archive/2012/03/23/2414252.html

作者:张善友

WebDAV 是超文本传输协议 (HTTP) 的一组扩展,为 Internet 上计算机之间的编辑和文件管理提供了标准.利用这个协议用户可以通过Web进行远程的基本文件操作,如拷贝、移动、删除等。在IIS 7.0中,WebDAV是作为独立扩展模块,需要单独进行下载,而IIS 7.5中将集成WebDAV,然而WebDav把Put,Delete给咔嚓了。所以在IIS 7.5上部署的RESTful服务(WCF Data Service,WCF Rest Service,ASP.NET Web API,ASP.NET MVC)就悲剧了,当发送Put请求就会发生HTTP Error 405.0 – Method  Not Allowed错误,解决方法也很简单,在Web.config里面加入如下设置:

[配置的内容同上]

-----------转载结束  }---------------------------------------------------------




在我们遇到的问题,是使用的修改web.config的解决方式。



这个是在IIS.net论坛上的交流(E文好的朋友可以看看),http://forums.iis.net/t/1196237.aspx

交流的跨站访问  Cross-site HTTP requests 时候的一些问题



另一篇关于CORS的(E文的探讨)http://brockallen.com/2012/10/18/cors-iis-and-webdav/