我有一个有点“奇怪的实践”问题。我们项目架构的要求是在WCF项目中设置Web API,如果可能的话,具备所有MVC功能。这意味着WCF和Web API Web服务将在同一个项目中同时启动。
这个可行吗?我尝试了一下,发现即使合并两个项目的web配置也非常困难。
感谢您的建议和评论,
Jakub
我有一个有点“奇怪的实践”问题。我们项目架构的要求是在WCF项目中设置Web API,如果可能的话,具备所有MVC功能。这意味着WCF和Web API Web服务将在同一个项目中同时启动。
这个可行吗?我尝试了一下,发现即使合并两个项目的web配置也非常困难。
感谢您的建议和评论,
Jakub
我按照以下步骤操作,一切都正常:
Install WebAPI to your project through Nuget Package Manager
Install-Package Microsoft.AspNet.WebApi
Create Controller folder and write your controller class and methods.
Register routes for your services in Application_Start method.
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
private void RegisterRoutes(RouteCollection routes)
{
routes.MapHttpRoute(
"webapi_route",
"/{controller}/{action}/{id}",
new { controller = "controller_name", action = "method_name", id = RouteParameter.Optional }
);
RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(service_name)));
}
事实上,在同一项目中使用这两种技术没有任何主要限制。默认情况下,WCF具有不同于ASP.NET的“管道”,但是可以进行更改。通过在web.config中使用以下配置,可以将WCF配置为使用相同的ASP.NET管道,从而共享请求对象的整个生命周期。但是不要认为这种方法对所有情况都适用,还需要考虑其他因素来做出决定,例如,您计划如何分发应用程序?当您发布WCF版本时,您也将发布Web.API,在许多情况下,您可能不希望出现这种结果。
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
这是可能的,但会失去MVC的好处(也就是说,例如您将无法使用内置的自动在线文档来制作Web服务)。
只需通过NuGet安装Web API,然后在global.asax中注册您的路由。创建您的api控制器,一切都应该很好。
编辑01.02.2017:
这不再是真的了。由于微软的方法是合并MVC和Web API控制器。现在任何事情都是可能的。