在路由路径上公开属于 MVC 应用程序中区域的 WCF 服务

Posted

技术标签:

【中文标题】在路由路径上公开属于 MVC 应用程序中区域的 WCF 服务【英文标题】:Expose WCF services that belong to an Area in MVC app at a routed path 【发布时间】:2011-05-02 03:23:01 【问题描述】:

我有一个 WCF 服务(假设 TestService.svc 位于 MVC 应用程序中区域的 services 目录中。该区域被合并到主应用程序中。该区域称为 content

路线已设置好,该区域运行良好。要访问 Home 控制器上的 Index 操作,我可以执行以下任一操作:

http://my-host/areas/content/index/home

http://my-host/content/index/home

但是,SVC 文件只能通过以下方式访问:

http://my-host/areas/content/services/TestService.svc

URL 必须包含areas 目录,我无法通过http://my-host/content/services/TestService.svc 直接访问它。如果我尝试,我会收到错误 404。

有没有办法设置应用程序,使其通过与控制器相同的路由表路由 SVC 请求?我不想为服务使用areas

【问题讨论】:

【参考方案1】:

如果您有权使用 .Net 4.0,您可能需要考虑通过 ServiceRoute 而不是通过 .svc 文件提供 WCF 服务。

这将使您能够避免使用 TestService.svc.cs 代码隐藏的 TestService.svc 文件。在您的 Global.asax.cs 中,您将拥有以下内容:

public static void RegisterRoutes(RouteCollection routes, IUnityContainer container)

    ... other MVC route mapping ....
    routes.Add(new ServiceRoute("TestService", new ServiceHostFactory(), typeof(LoaEvents)));

您的服务应该可以通过http://my-host/TestService访问。

您也许可以将 "TestService" 参数更改为 "/content/services/TestService" 或更适合您需要的东西。

【讨论】:

附带说明,您不能使用正斜杠开始路由路径,所以它应该是content/services/TestService 在应用路由约束后,我能够使用此解决方案,如geekswithblogs.net/michelotti/archive/2010/09/22/… 我刚刚救了我的命

以上是关于在路由路径上公开属于 MVC 应用程序中区域的 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MVC 中设置默认路由(到某个区域)

关于asp.netCore3.0区域和路由配置

MVC 2 区域注册路由顺序

在 MVC 应用程序上公开 OData

mvc区域路由?

大规模网络路由配置及分析