2010-08-21 106 views
8

我创建了一个WCF REST(又名WebHttp)服务在.NET 4中,使用微软的WCF REST服务模板40.我在IIS 6WCF REST服务不支持PUT和DELETE

托管服务

服务模板使用Global.asax中的RouteTable作为创建不包含“.svc”的“干净”URL的方式。例如:

的http://本地主机/航班/ 878

GET和POST做工精细反对这个URL,但在HTTP 501 PUT和DELETE结果, “没有实现”。

如果我创建一个简单的.svc文件是这样的:

<%@ ServiceHost Language="C#" Debug="true" Service="MyProject.FlightsService"%> 

然后我可以使用PUT和DELETE针对此网址:

的http://本地主机/ flightsservice.svc/878

有谁知道是否有可能得到PUT和DELETE对上面的“干净”的URL工作?看起来没有办法配置IIS来允许这样做,因为没有文件扩展名来配置设置,并且我不想全局允许PUT和DELETE。

+0

看到一个类似的问题是如何解决的在IIS 7.5 [这里](http://stackoverflow.com/questions/3745015/webdav -troubles换问题的REST-WCF的Web服务)。该解决方案非常优雅。 – lmsasu 2010-09-19 13:28:44

回答

4

我有一段时间没有与IIS6一起工作(我没有安装它,所以我在这里关闭内存),但是我必须实现类似于IIS6的东西,才能在IIS6中路由无扩展的URL。

您可以通过黑客入侵IIS管理器来逐个文件夹地启用通配符脚本映射。这blog post是我所遵循的,它的工作非常好(这link提供了更多的背景)。这是管理器中的一个错误,而不是IIS本身(至少这是我自己告诉的)。

您能否在您的网站的子文件夹中引用您的服务(例如http://localhost/services/flight/878)?如果是这样,并且如果您在上面实现了IIS管理器,我认为您可以为该目录启用所有HTTP动词。再次,我要离开内存(我们只实现了GET和POST,所以我没有处理PUT和DELETE),所以我希望我能够做到这一点。

让我知道你是否需要更多的信息或者我的记忆是否滑落。 :) 我希望这有帮助!

+0

谢谢,这工作!由于我的IIS应用程序将仅包含服务,因此我为您发布的第二个链接中描述的整个应用程序设置了通配符映射。非常感谢!迈克 – 2010-08-23 17:41:44

+0

得爱这些“无证”的功能。 :) 很高兴它对你有效。 – 2010-08-23 17:44:25

2

如果您的Web应用程序正在部署到多个开发/生产环境,那么最好的方法似乎是在web.config级别禁用WebDAV。要做到这一点,取出WebDAVModule和WebDAV的处理程序,下面的例子:

<system.webserver> 
    <modules> 
    <remove name="WebDAVModule" /> 
    </modules> 
    <handlers> 
    <remove name="WebDAV" /> 
    </handlers> 
</system.webserver> 
+1

问题是如何在应用程序级别的IIS中启用PUT和DELETE。 – 2012-09-23 08:27:54

+1

是的,这将导致IIS允许它仅用于当前的应用程序,而不会像原始海报所要求的那样在全局启用它。如果你不移除WebDAV模块和处理程序,PUT和DELETE请求将被它们劫持,并且不起作用。 – DanilF 2012-10-07 19:01:49