我正在使用一个内置于.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 类。
我可以给您一个向 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)
{
}
}