面向服务开发越来越普及的今天,使用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 �C 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/