我有一点“奇怪的练习”问题。对我们项目架构的要求是在WCF项目中使用(如果可能)所有MVC优势来设置Web API。这意味着WCF和Web API Web服务将在一个项目中相互站立。
这甚至可行吗?我已经给了它一个简短的发现,发现即使合并两个项目的网络配置也很难。
感谢您的建议和意见,
的Jakub
答案 0 :(得分:3)
我按照这些步骤操作并且运行正常:
安装包Microsoft.AspNet.WebApi
创建Controller文件夹并编写控制器类和方法。
在 Application_Start 方法中注册服务的路线。
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)));
}
答案 1 :(得分:0)
事实上,在同一项目中使用这两种技术没有重大限制。默认情况下,wcf具有与asp.net不同的“管道”,但在此之前可以更改。使用web.config中的以下配置,可以将wcf配置为使用相同的asp.net管道,从而共享请求对象的整个生命周期。但是,不要认为这种方法适用于所有情况,需要考虑其他因素来做出决定,例如,您计划如何分发您的应用程序?当您发布wcf版本时,您也将发布web.api,在许多情况下您可能不希望出现此结果。
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
答案 2 :(得分:-1)
有可能但失去了MVC的好处(这意味着您将无法使用例如Web服务的内置自动在线文档)。
只需通过NuGet安装Web API,然后在global.asax中注册您的路由。创建你的api控制器,它应该都很好。
编辑01.02.2017:
这不再是真的。由于Microsoft的方法是合并MVC和Web API控制器。现在任何 可能。