我在 IIS 7.5 上使用 WCF 4,并希望从我所有 RESTful 服务的 URL 中删除默认的 .svc 扩展名。我已经看到使用 Url Rewrite Module 和 IHttpModule 记录的方法,但我不想采用这些方法。
我隐约熟悉 ASP.NET MVC 中引入的路由概念,据我所知,它们现在从 Net 4 中的 MVC 中抽象出来作为 System.Web.Routing。但是在查看文档时,我似乎需要在我的项目中添加一个 Global.asax 文件,但我并不是很喜欢这个文件。有没有其他方法可以处理这个问题?
我还看到了基于配置的激活功能,但这似乎只是消除了 .svc 文件,但仍然需要我在服务的 url 中使用 .svc。
任何人都可以在这里总结一下我的选项,因为我的网址中不需要 .svc 吗?
最佳答案
当然,没问题:首先,阅读 A Developer's Introduction to Windows Communication Foundation 4 中有关 WCF 4 新功能的所有信息。
您正在寻找的称为无文件服务激活。这是 <system.serviceModel>
中的一个新设置,如下所示:
<serviceHostingEnvironment>
<serviceActivations>
<add factory="System.ServiceModel.Activation.ServiceHostFactory"
relativeAddress="/YourService"
service="SomeNamespace.YourService"/>
</serviceActivations>
</serviceHostingEnvironment>
基本上,您在 *.svc 文件(路径、要调用的服务)中拥有的所有信息现在都在此配置部分中。
您应该可以通过以下方式调用此服务
http://yourserver/virtualdirectory/YourService
现在 - 没有更多的 *.svc,没有凌乱的 URL 重写等 - 它只是简单的工作!
更新: 它似乎没有那么好用,除非你进入并在你的相对路径中添加一个 *.svc 扩展名 - 有点违背了整个目的!
如果您想使用 ASP.NET 路由进行注册,请查看有关该主题的 MSDN docs。你必须在你的应用程序启动时有这样的东西,在一个
global.asax.cs
的网络应用程序中:void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
private void RegisterRoutes(RouteCollection routes)
{
routes.Add(new ServiceRoute("YourService",
new WebServiceHostFactory(), typeof(SomeNamespace.YourService)));
}
希望如此,您将能够在没有任何 *.svc 文件扩展名的情况下启动并运行您的服务!
关于wcf - 使用路由消除 WCF 4 服务 URL 中的 .svc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3292908/