首页 > 解决方案 > 如何从 WPF 应用程序提供 RESTful Web 服务?

问题描述

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

流量:

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 格式。我在http://editor.swagger.io/为它准备了 OpenAPI(在YAML中)模式。将来它可用于对 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自动生成。

有一篇文章未能将 ASP.NET Core 2.x 集成到 WPF 应用程序中。不幸的是,ASP.NET Core 3.0 及更高版本只能在 .NET Core 上运行。

我在这里和那里有一些东西,但不是一个可行的概念。我的选择可能是:

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

PS。有一个类似的问题如何在 WPF 项目中公开一个宁静的服务,但它已经过时了。

标签: c#wpfrestservicestack

解决方案


这听起来像你的要求:

WPF 应用程序应该能够公开 Web API。这将由 Web 应用程序使用。

但是,您反对唯一可以使其成为可能的解决方案:

从 WPF 应用程序启动具有 Web 服务的 Web 服务器。听起来很糟糕。

我不确定您还期望如何在不启动 Web 服务器的情况下公开 Web API?在 UI 应用程序中,您希望启动自托管服务。

自托管

在 ServiceStack 中,您可以在 WPF 应用程序中启动自托管服务,该服务可以是自托管的 .NET Framework HTTP 侦听器,也可以是.NET Framework 应用程序上的 ASP.NET Core。微软表示将无限期支持这两个选项,但 .NET Framework 正在逐步淘汰,ASP.NET Core 3.0 只能在 .NET Core 上运行,而 .NET Framework 在 v4.x 上停止开发,因为.NET 5 只是将成为 .NET Core 的下一个版本

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


推荐阅读