如何从WPF应用程序提供RESTful Web服务?

时间:2019-06-04 10:28:06

标签: c# wpf rest servicestack

通常,WPF应用程序是Web服务器上RESTful服务的使用者/客户端。我想扭转它-WPF应用程序应该能够公开Web API。这将由网络应用程序消耗。

流程:

web app ---sends a command to--> WPF app
** WPF app makes a 'long running job' until its user decides to stop **
WPF app ---passes data back to--> web app

通信应为Json格式。我已经在OpenAPI为其准备了YAML(在http://editor.swagger.io/中)模式。将来,它可以用于更改WPF应用程序的Web API。

它允许生成ASP.NET Core服务器c#代码存根。在WPF中运行ASP.NET Core服务器有什么要求,并且重量轻到足以使用?

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .Build();

// somewhere in the WPF app: BuildWebHost(args).Run();

该代码由https://github.com/swagger-api/swagger-codegen自动生成。

有一个post无法将ASP.NET Core 2.x集成到WPF应用程序中。不幸的是,ASP.NET Core 3.0和更高版本只能在.NET Core上运行。

我到处都有一些地方,但没有一个可行的概念。我的选择可能是:

  • 使用第三方框架或库。应该能够使用OpenAPI / YAML模式或Swagger生成的服务器存根代码等。
    • ServiceStack可能是这里缺少的东西吗?
  • 将ASP.NET Core集成到WPF中。甚至有可能吗?
  • 使用WPF应用程序中的Web服务启动单独的Web服务器(不是自托管)。听起来不好。
  • 实施WCF Web服务和请求。
  • ...

如何在WPF端实施Web服务器/服务?也许有一个现有的第三方框架可以使我免于重新发明轮子?

PS。有一个类似的问题how to expose a restful service inside a WPF project,但已经过时了。

1 个答案:

答案 0 :(得分:1)

这听起来像您的要求:

  

WPF应用程序应该能够公开Web API。这将由网络应用程序消耗。

但是,您反对唯一可能的解决方案:

  

使用WPF应用程序中的Web服务启动Web服务器。听起来不好。

我不确定您期望在不启动Web服务器的情况下公开Web API的其他方式吗?您要在UI App中启动自托管服务。

自我托管

在ServiceStack中,您仅可以在WPF应用程序中启动self-hosted Service,该应用程序可以是自托管的.NET Framework HTTP侦听器,也可以是ASP.NET Core on .NET Framework应用程序。 Microsoft所说的两个选项都将得到无限期的支持,但是.NET Framework正在逐步被ASP.NET Core 3.0淘汰,只能在.NET Core和.NET Framework上运行,并停止在v4.x上以.NET 5 is just going to be the next version of .NET Core的形式进行开发。

但这并不应该改变您现在可以使用的解决方案,如果您需要在WPF .NET Framework应用程序中运行Web服务,则需要运行自托管的.NET Framework HTTP Server,该服务器可以成为自托管的HTTP侦听器或ASP.NET Core(在.NET FX上)应用。