如何使用现有 WCF 服务将 REST API 添加到 .NET Framework 解决方案?

问题描述 投票:0回答:1

我正在使用一个内置于.net Framework 4.5(在测试环境中升级到4.8)的成熟应用程序。我是一名学生,申请中有很多东西我不完全理解。我会尽力解释我目前所理解的。

有两个解决方案,解决方案A和解决方案B。解决方案A有两个项目,其中一个项目使用IIS Express,这里使用REST API,另一个项目集成解决方案B的WCF服务。有代理类还有。

解决方案 B 正在其项目之一中实现 WCF 服务。在这个项目中,我可以看到ServiceContract和OperationContract等属性,但看不到DataContract。

现在我的任务是将一些使用WCF服务的方法转换为RESTful API。我不知道是否应该创建一个新的 asp.net core 项目,或者是否应该使用已实现 WCF 的同一项目并开始在此处实现 REST API。我的第二个问题是如何处理端点,以及如何将 REST API 集成到解决方案 A 中?我应该创建一个 asp.net core webapi 项目并制作模型和控制器吗?

如有任何帮助,我们将不胜感激。 =)

尝试将 REST API 添加到现有 WCF 项目到解决方案 B:

我尝试与 WCF 服务一起实现 REST API。但是,我不确定如何使用 Postman 测试控制器方法。由于解决方案 A 通过代理类集成了解决方案 B 中的 WCF 服务,因此我不确定在解决方案 B 中添加 RESTful API 将如何影响这些集成。我没有对解决方案 A 进行任何更改以响应新控制器。

创建新的 ASP.NET Core Web API 项目:

我还创建了一个新的 asp.net webapi 项目,旨在将特定的 WCF 服务功能迁移到 RESTful API。我创建了一个控制器,但是WCF项目非常复杂。有很多依赖关系。运行项目时出现此错误:

System.AggregateException:“无法构造某些服务(验证服务描述符时出错”ServiceType:Integration.Data.Interfaces.IUserDataService Lifetime:作用域实现类型:Integration.Data.Services.UserDataService”:无法解析服务尝试激活“Integration.Data.Services.UserDataService”时键入“DirectoryService.IDirectoryUserService”。)'

我尝试将 WCF 项目的引用添加到我的新 api 项目中,但错误并未解决。 目前,我的 Web api 项目没有 Model 类。

asp.net .net rest wcf
1个回答
0
投票

我可以给您一个向 WCF 项目添加 Rest API 的示例:

1.在Nuget

上安装相关包

2.添加两个类

public class RouteConfig
 {
     public static void RegisterRoutes(RouteCollection routes)
     {
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

         routes.MapRoute(
             name: "Default",
         url: "{controller}/{action}/{id}",
             defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
         );
     }
 }



public static class WebApiConfig
 {
     public static void Register(HttpConfiguration config)
     {
         // Web API configuration and services

         // Web API routes
         config.MapHttpAttributeRoutes();

         config.Routes.MapHttpRoute(
             name: "DefaultApi",
             routeTemplate: "api/{controller}/{id}",
             defaults: new { id = RouteParameter.Optional }
         );
     }
 }

3.添加Global.asax

protected void Application_Start(object sender, EventArgs e)
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof("yourservicename")));
}

4.添加API控制器

public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "WCFTest";
    }

    // POST api/values
    public void Post([FromBody] string value)
    {
    }

    // PUT api/values/5
    public void Put(int id, [FromBody] string value)
    {
    }

    // DELETE api/values/5
    public void Delete(int id)
    {
    }
}

5.输出:

© www.soinside.com 2019 - 2024. All rights reserved.