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