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

标签 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/在导航到 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/

相关文章:

.net-4.0 - 使用Entity Framework 4.0读取CSV文件

.net - 采用默认 web.config 并增加 maxStringContentLength 所需的更改

c# - 为什么 BeforeFieldInit 行为在 .NET 4 中发生了变化?

c# - WCF - 反序列化时控制命名空间

c# - WCF 中的泛型集合支持

wcf - 向 WCF 数据契约(Contract)添加字段会破坏客户端?

python - 如何合并两个包含具有相同签名的方法的Python类?

android - 包含来自 REST 服务的项目的 ListView

sql - 30 + 小时查询的最佳架构

web-services - 使用魔术(我/自己)资源标识符是否违反REST原则?