在 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的主要内容,如果未能解决你的问题,请参考以下文章

在 WCF 客户端的代码中设置消息版本

在 App.config 中设置 WCF ClientCredentials

如何在 dotnet core web api 中设置起始页?

在 wcf 服务中设置 cookie

在 API Gateway 中设置阶段 » 为 REST API 部署设置阶段变量Stage variables

如何在 openapi 中设置默认 API 定义 url?