在WCF项目中设置Web API

8

我有一个有点“奇怪的实践”问题。我们项目架构的要求是在WCF项目中设置Web API,如果可能的话,具备所有MVC功能。这意味着WCF和Web API Web服务将在同一个项目中同时启动。

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

感谢您的建议和评论,

Jakub

3个回答

9

我按照以下步骤操作,一切都正常:

  1. Make sure your WCF service is working correctly.
  2. Install WebAPI to your project through Nuget Package Manager

    Install-Package Microsoft.AspNet.WebApi

  3. Create Controller folder and write your controller class and methods.

  4. Create global.asax file
  5. Register routes for your services in Application_Start method.

    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
这里的service_name是什么? - jcmordan
你的 WCF 类名。 - Nameless
1
@jcmordan 我有同样的问题... 如果你没有现成的 svc 类,你可以创建一个新的。 - tno2007
1
感谢@AjayAradhya提供的逐步指导。非常顺利地解决了问题! - Rafael Araújo
服务名称仍然有些混淆,请您能否添加一个示例? - Arun Prasad E S

0

事实上,在同一项目中使用这两种技术没有任何主要限制。默认情况下,WCF具有不同于ASP.NET的“管道”,但是可以进行更改。通过在web.config中使用以下配置,可以将WCF配置为使用相同的ASP.NET管道,从而共享请求对象的整个生命周期。但是不要认为这种方法对所有情况都适用,还需要考虑其他因素来做出决定,例如,您计划如何分发应用程序?当您发布WCF版本时,您也将发布Web.API,在许多情况下,您可能不希望出现这种结果。

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

-1

这是可能的,但会失去MVC的好处(也就是说,例如您将无法使用内置的自动在线文档来制作Web服务)。

只需通过NuGet安装Web API,然后在global.asax中注册您的路由。创建您的api控制器,一切都应该很好。

编辑01.02.2017:

这不再是真的了。由于微软的方法是合并MVC和Web API控制器。现在任何事情都是可能的


2
并不是绝对正确的说法。你可以在同一个应用程序中使用MVC、Web API和WCF,它们都是独立的技术部分。只要确保你的路由没有重叠,除此之外它们就能够一起工作。我已经在生产环境中使用了完全相同的架构解决方案。 - reckface
@reckface 这是现实情况,请查看评论之前的日期。这个方案已经过时了。 - Jakub Holovsky
@reckface 没事,这种情况很常见 :) 说实话,我应该更新我的答案 :] - Jakub Holovsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接