【问题标题】:How to Host WCF REST Service and WCF Data Service in the same global.asax如何在同一个 global.asax 中托管 WCF REST 服务和 WCF 数据服务
【发布时间】:2011-06-24 05:49:41
【问题描述】:

我有一个 WCF REST Web 服务,它通过 global.asax 中的服务路由托管,如下所示;

protected override void RegisterRoutes(System.Web.Routing.RouteCollection routeTable)
    {
        routeTable.Add(new ServiceRoute("", new WebServiceHostFactory(),
                       typeof(UserService)));
    }

我想知道是否可以在同一个应用程序中同时托管另一个 Web 服务(即 WCF 数据服务)。

protected override void RegisterRoutes(System.Web.Routing.RouteCollection routeTable)
    {
        routeTable.Add(new ServiceRoute("", new WebServiceHostFactory(),
                       typeof(UserService)));
        routeTable.Add(new ServiceRoute("OData", new DataServiceHostFactory(),
                       typeof(UserDataService)));
    }

尝试在我的浏览器中导航到 http://localhost:port/ 会正常显示标准 REST 服务,而导航到 http://localhost:port/OData 会显示“未找到终点页面”。

原因是我需要保留 REST 服务中的遗留代码,但还想通过数据服务公开一些纯数据。

【问题讨论】:

  • 一个最喜欢的,几个赞成票和几十个意见,甚至没有一个建议?当然,至少有人可以暗示从哪里开始寻找。

标签: wcf rest .net-4.0 wcf-data-services


【解决方案1】:

事实证明这是非常简单的,我完全忽略了显而易见的。

当您托管多个服务路由时,您不能像使用单个路由一样在任何路由上使用默认/空路由前缀。请注意,这就是我在上面的 UserService 路由问题中提出的问题。

因此,为两个服务路由提供路由前缀允许两个服务托管在同一个 global.asax 中。

为完整性提供代码...

protected override void RegisterRoutes(System.Web.Routing.RouteCollection routeTable)
{
    routeTable.Add(new ServiceRoute("Rest", new WebServiceHostFactory(),
                   typeof(UserService)));
    routeTable.Add(new ServiceRoute("OData", new DataServiceHostFactory(),
                   typeof(UserDataService)));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 2014-10-11
    • 2011-09-04
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多