【问题标题】:Setting up Web API within WCF Project在 WCF 项目中设置 Web API
【发布时间】:2013-08-14 18:57:49
【问题描述】:

我有一个“奇怪的练习”问题。我们项目架构的要求是在 WCF 项目中使用(如果可能)所有 MVC 优点设置 Web API。这意味着 WCF 和 Web API Web 服务将在一个项目中相互支持。

这甚至可行吗?我试了一下,发现即使合并两个项目的 Web 配置也非常困难。

感谢您的建议和cmets,

雅库布

【问题讨论】:

    标签: asp.net-mvc wcf asp.net-web-api


    【解决方案1】:

    我按照以下步骤操作,效果很好:

    1. 确保您的 WCF 服务正常工作。
    2. 通过Nuget Package Manager将WebAPI安装到你的项目中

      安装包 Microsoft.AspNet.WebApi

    3. 创建控制器文件夹并编写控制器类和方法。

    4. 创建 global.asax 文件
    5. 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 一切都很好,碰巧 :) 老实说,我可能应该更新我的答案:]
      猜你喜欢
      • 2011-12-08
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      相关资源
      最近更新 更多