在WCF项目中设置Web API

时间:2013-08-13 08:38:19

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

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

这甚至可行吗?我已经给了它一个简短的发现,发现即使合并两个项目的网络配置也很难。

感谢您的建议和意见,

的Jakub

3 个答案:

答案 0 :(得分:3)

我按照这些步骤操作并且运行正常:

  1. 确保您的WCF服务正常运行。
  2. 通过Nuget Package Manager

    将WebAPI安装到您的项目中
      

    安装包Microsoft.AspNet.WebApi

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

  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)));
    }
    

答案 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控制器。现在任何 可能