在路由路径上公开属于 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 服务的主要内容,如果未能解决你的问题,请参考以下文章