我有一个 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/在导航到 http://localhost:port/OData 时可以很好地启动标准 REST 服务调出“未找到终点页面”。
这样做的原因是我需要保留 REST 服务中的遗留代码,但也想通过数据服务公开一些纯数据。
最佳答案
事实证明这非常简单,我完全忽略了显而易见的事情。
当您托管多个服务路由时,您不能像在单个路由上那样在任何路由上拥有默认/空路由前缀。请注意,这就是我在上面的 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)));
}
关于wcf - 如何在同一个 global.asax 中托管 WCF REST 服务和 WCF 数据服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6463933/