8

我使用 Microsoft 的 WCF REST 服务模板 40 在 .NET 4 中创建了 WCF REST(又名 WebHttp)服务。我在 IIS 6 中托管该服务。

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

http://localhost/航班/878

GET 和 POST 对这个 URL 工作正常,但 PUT 和 DELETE 会导致 HTTP 501,“未实现”。

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

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

然后我可以对这个 URL 使用 PUT 和 DELETE:

http://localhost/flightservice.svc/878

有谁知道是否有可能让 PUT 和 DELETE 与上面的“干净”URL 对抗?似乎没有办法配置 IIS 来允许这样做,因为没有文件扩展名来配置设置,而且我不想全局允许 PUT 和 DELETE。

4

2 回答 2

4

我已经有一段时间没有使用过 IIS6(而且我没有安装它,所以我在这里不记了),但我必须实现与 IIS6 类似的东西,以便在 IIS6 中路由无扩展 URL。

您可以通过破解 IIS 管理器逐个文件夹启用通配符脚本映射。这篇博文是我关注的,它运行得非常好(这个链接提供了更多背景知识)。这实际上是管理器中的错误,而不是 IIS 本身(至少我是这么告诉自己的)。

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

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

于 2010-08-21T01:39:47.367 回答
2

如果您的 Web 应用程序被部署到多个开发/生产环境,那么最好的方法似乎是在 web.config 级别禁用 WebDAV。为此,请删除 WebDAVModule 和 WebDAV 处理程序,如下例所示:

<system.webserver>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webserver>
于 2012-09-06T20:22:45.767 回答