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

时间:2010-10-28 21:58:14

标签: asp.net-mvc wcf

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

路线已经设置,区域正常。要访问content控制器上的Index操作,我可以执行以下操作:

Home

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

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

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

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

有没有办法设置应用程序,以便它通过与控制器相同的路由表路由SVC请求?我不想将http://my-host/content/services/TestService.svc用于服务。

1 个答案:

答案 0 :(得分:24)

如果您可以自由使用.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"或更符合您需求的内容。