在 WCF 项目中设置 Web API
Posted
技术标签:
【中文标题】在 WCF 项目中设置 Web API【英文标题】:Setting up Web API within WCF Project 【发布时间】:2013-08-14 18:57:49 【问题描述】:我有一个“奇怪的练习”问题。我们项目架构的要求是在 WCF 项目中使用(如果可能)所有 MVC 优点设置 Web API。这意味着 WCF 和 Web API Web 服务将在一个项目中相互支持。
这甚至可行吗?我试了一下,发现即使合并两个项目的 Web 配置也非常困难。
感谢您的建议和cmets,
雅库布
【问题讨论】:
【参考方案1】:我按照以下步骤操作,效果很好:
-
确保您的 WCF 服务正常工作。
通过Nuget Package Manager将WebAPI安装到你的项目中
安装包 Microsoft.AspNet.WebApi
创建控制器文件夹并编写控制器类和方法。
创建 global.asax 文件在 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)));
【讨论】:
这里的 service_name 是什么? 你的 WCF 类名。 @jcmordan 我也有同样的问题......如果你没有现有的 svc 类,你可以创建一个新的 感谢@AjayAradhya 的逐步指导。像魅力一样工作! service_name 还是比较混乱,能不能加个样例【参考方案2】:事实上,在同一个项目中使用这两种技术并没有太大的限制。默认情况下,wcf 具有与 asp.net 不同的“管道”,但在此之前可以更改。使用 web.config 中的以下配置,可以将 wcf 配置为使用相同的 asp.net 管道,从而共享请求对象的整个生命周期。但不要相信这种方法适用于所有情况,需要考虑其他因素来做出决定,例如,您打算如何分发您的应用程序?当您发布一个 wcf 版本时,您也将发布 web.api,在许多情况下您可能不想要这个结果。
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
【讨论】:
【参考方案3】:这是可能的,但会失去 MVC 的优点(这意味着您将无法使用内置的自动在线文档等网络服务)。
只需通过 NuGet 安装 Web API,然后在 global.asax 中注册您的路由。创建您的 api 控制器,它应该一切都好。
编辑 01.02.2017:
这不再是真的。由于微软的方法是合并 MVC 和 Web API 控制器。现在任何事情都是可能的。
【讨论】:
不完全正确。您可以在同一个应用程序中拥有 MVC、Web API 和 WCF。它们是独立的技术。只要确保您的路由不重叠,但除此之外它就可以工作。我有一个具有完全相同架构的生产解决方案。 @reckface 现在是这样,不是在 2013 年。请在评论之前查看日期。这是一个过时的解决方案。 @reckface 一切都很好,碰巧 :) 老实说,我可能应该更新我的答案:]以上是关于在 WCF 项目中设置 Web API的主要内容,如果未能解决你的问题,请参考以下文章
在 App.config 中设置 WCF ClientCredentials
如何在 dotnet core web api 中设置起始页?