我有一个要求,我需要能够拥有一个独立版本的应用程序,以及一个在线版本。一种可能的方法是拥有一个 WPF 版本,它可以满足独立的需求,以及一个 MVC Web 版本。
显然,这将需要两个代码库(尽管除了前端代码之外,它们应该是相同的)。Web API 自托管是否足够稳定,如果需要,我可以在其中托管一个成熟的 Web 应用程序?
我有一个要求,我需要能够拥有一个独立版本的应用程序,以及一个在线版本。一种可能的方法是拥有一个 WPF 版本,它可以满足独立的需求,以及一个 MVC Web 版本。
显然,这将需要两个代码库(尽管除了前端代码之外,它们应该是相同的)。Web API 自托管是否足够稳定,如果需要,我可以在其中托管一个成熟的 Web 应用程序?
如果您可以使用相同的数据库/服务来使用内部/外部应用程序,您可以在 IIS 中托管单个版本的 WebAPI 服务器,并将其用于 API 控制器。
然后,您可以使用两个相同的 ASP.Net MVC 站点(而不是桌面和 Web),它们调用您的 WebAPI 服务。一个托管在 Intranet 上,一个托管在 Internet 上 - 两者都使用您的 WebAPI 来实现业务功能和数据持久性。
这里的目标是减少维护的代码量。本质上,它是两个项目——您的 WebAPI 项目和一个 ASP.Net MVC 站点。
对于这种情况,不需要有两个或更多的代码库。您需要的是一个为您的应用程序提供 API 的库。该库可以直接在我认为是桌面应用程序的独立应用程序中使用。
然后,您可以创建一个 WCF 或 Web API,甚至两者都对这只不过是同一个库的包装器进行分层。WCF/Web API 合同可以与您的 DTO 相同,因此 WCF 服务实现将是这样的:
SomeObject IMyService.DoStuff(string param)
{
var myLibrary = new MyLibrary();
var someObject = myLibrary.DoStuff(param);
return someObject;
}
唯一的开销是当库中的接口更改时,服务接口中的更改也必须重复,但不会复制实际的业务逻辑。您甚至可以共享接口,即如果您不介意在库接口上具有协定属性,API 将公开 WCF 服务所实现的相同接口。
Web API 可以运行自托管,但要运行 ASP.NET (MVC),您需要像IIS (Express)这样的服务器。
您可以做的是在机器上安装 IIS Express,在其中托管您的 Web 应用程序,并在需要时自行托管 Web API。当然,如果您已经安装了 IIS Express,您可能只想选择运行其中的所有内容:Web 应用程序和 Web API。
我使用 Web API 来自托管许多正在生产的项目。网站http://www.hypermediaapi.com是一个自托管的 Web API。