我有一个“奇怪的练习”问题。我们项目架构的要求是在 WCF 项目中使用(如果可能)所有 MVC 优点设置 Web API。这意味着 WCF 和 Web API Web 服务将在一个项目中相互支持。
这甚至可行吗?我试了一下,发现即使合并两个项目的 Web 配置也非常困难。
感谢您的建议和意见,
雅库布
我有一个“奇怪的练习”问题。我们项目架构的要求是在 WCF 项目中使用(如果可能)所有 MVC 优点设置 Web API。这意味着 WCF 和 Web API Web 服务将在一个项目中相互支持。
这甚至可行吗?我试了一下,发现即使合并两个项目的 Web 配置也非常困难。
感谢您的建议和意见,
雅库布
我按照以下步骤操作,效果很好:
通过Nuget 包管理器将 WebAPI 安装到您的项目中
安装包 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)));
}
事实上,在同一个项目中使用这两种技术并没有太大的限制。默认情况下,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 控制器。现在一切皆有可能。