如何在同一global.asax中托管WCF REST服务和WCF数据服务

时间:2011-06-24 05:49:42

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

我有一个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服务中的遗留代码,但也希望通过数据服务公开一些纯数据。

1 个答案:

答案 0 :(得分:4)

事实证明这非常简单,我完全忽略了这一点。

当您托管多个服务路由时,您似乎无法在任何路由上使用默认/空路由前缀,就像使用单个路由一样。请注意,这是我在上面针对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)));
}