wcf - 使用路由消除 WCF 4 服务 URL 中的 .svc?

标签 wcf rest

我在 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/

相关文章:

用于从子资源列表中更新/添加/删除项目的 REST 设计

http - 以 RESTful 方式对网页用户进行身份验证的首选方法是什么?

java - 不使用 Http-Authentication 在 Apache Jersey 中进行身份验证?

android - 如何在 Android 中集成 RESTful webservice

java - 具有文件输入流和 json 正文的 Web 服务?

c# - 从 C# WCF 服务返回具有动态维数的锯齿状数组

wcf - 在 Azure 中托管超过 25 个 WCF 服务

wcf - Visual Studio 2012 安装破坏了我的 2010 WCF 项目

c# - WCF 服务从 DataContract 接收空值

c# - 我可以将 Let's Encrypt 证书与我的自托管 WCF 应用程序一起使用吗?