如何在Azure中部署和托管.NET Core自托管控制台应用程序?

5

应用程序1:我有一个基于create-react-app的React应用程序,我已将其作为Web应用程序添加到Azure中-设置起来非常简单。这个应用程序使用JS SignalR客户端与服务器进行通信,接下来会提到。

应用程序2:这个应用程序是ASP.NET Core SignalR服务器应用程序,使用dotnet new console创建。该应用程序公开了一个SignalR端点,并且是“自托管”的。

应用程序3:第二个ASP.NET Core控制台应用程序被设置为SignalR客户端。它负责获取一些数据,并将这些数据发送到SignalR服务器。这需要将SignalR端点(url)作为命令行参数。

在本地运行所有这些都很简单:

应用程序1:npm start / serve -s build

应用程序2:dotnet run -commandline args(在localhost上运行,从提供的args获取hubpath和port。端口是为了让多个实例的SignalR服务器在localhost上运行-不确定是否在Azure中以此方式操作或者它们在那里分别使用不同的URL和独立托管)

应用程序3:dotnet run "http://localhost:5000/somenotificationhubname"

我在每个控制台应用程序中添加了一个bat文件,这样我就可以打开多个具有不同args的实例。

因此,在本地运行时只需单击3个bat文件即可。

但是,我有点迷失在如何在Azure中托管所有这些方面。Web应用程序似乎非常简单。我只需在Azure中创建一个Web应用程序,通过FTP客户端连接到它,并将React应用程序的构建文件夹内容复制过去。

但是,对于ASP.NET Core控制台应用程序,我该怎么办,以便SignalR控制台应用程序将在Azure中托管,并公开其端点供其他2个应用程序使用?

我尝试将应用程序2和3都添加为应用程序1下的Web作业,但那似乎没有起作用。

我还听说SignalR不应在IIS上运行,因此将其做成自包含(exe)并在docker容器中运行是否有意义?非常感谢任何帮助。


关于WebJobs,你说“似乎不起作用”。是什么没有起作用?有出现错误消息或其他问题吗? - Wouter de Kort
嗯,它们似乎运行正常,如果我选择了连续模式。但是,由于这些进程应该一直运行,直到手动终止,从逻辑上讲,我认为“触发”更正确,然后手动启动它们。然而,一个大问题是,我无法通过Web应用程序的URL和端口访问SignalR终结点,尽管这个端口在SignalR Web作业的批处理文件的命令行参数中明确添加了。批处理文件只需运行dotnet run [路径] [端口],日志显示它已经启动了,但是除非选择“连续”模式,否则它会提前退出。即使选择了连续模式,它也不会响应URL。 - Dac0d3r
SignalR的哪个版本?目前还没有任何支持的发布版本。 - Tratcher
https://github.com/aspnet/SignalR - 我正在使用支持组和其他功能的开发版本之一。但最新版本是https://github.com/aspnet/SignalR/releases/tag/1.0.0-alpha2。 - Dac0d3r
2个回答

4
我建议您将应用程序更改为使用AppSettings文件来配置值,而不是使用命令行参数。
  1. 您可以轻松更改appsettings的值,而无需重新部署或更改任何内容。
  2. 您可以基于环境拥有多个appsettings文件。
  3. 允许您轻松复制具有相同代码但不同appsettings的应用程序,以供多个signalr服务器使用。
这将使使用Visual Studio的标准发布向导或通过命令行进行部署更加容易。

我同意使用appsettings而不是命令行参数。但是你会如何进行托管? - Dac0d3r
只需按照之前发布的链接,您可以使用PowerShell命令行界面或Visual Studio向Azure发布Web应用程序。 - Satya Tanwar

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接