使用.Net 6部署Azure应用服务Web作业无法启动“无法绑定到地址http://127.0.0.1:5000:地址已在使用中”

2ic8powd  于 2023-01-09  发布在  .NET
关注(0)|答案(1)|浏览(447)

我在将Azure应用服务从. Net Core 5迁移到6,同时更新Azure Portal中的堆栈配置以使用. Net版本". Net 6(LTS)"时遇到问题。应用服务仅包含处理服务总线消息的连续webjob。webjob项目在本地运行正常,但部署到Azure时无法启动。在Kudu工具中,我看到一个错误:

[01/03/2023 18:21:32 > 1b0f90: ERR ] Unhandled exception. System.IO.IOException: Failed to bind to address http://127.0.0.1:5000: address already in use.
[01/03/2023 18:21:32 > 1b0f90: ERR ]  ---> Microsoft.AspNetCore.Connections.AddressInUseException: Only one usage of each socket address (protocol/network address/port) is normally permitted.
[01/03/2023 18:21:32 > 1b0f90: ERR ]  ---> System.Net.Sockets.SocketException (10048): Only one usage of each socket address (protocol/network address/port) is normally permitted.

最终,我能够通过将应用设置ASPNETCORE_URLS=http://localhost:5001应用到应用服务,并将相同的应用设置应用到每个在同一应用服务计划中运行Web作业的. Net Core 6应用服务来克服错误,除了我必须将端口增加到不同的值。这似乎不是非Web作业应用程序的问题,并且仅当我在Azure Portal中将应用服务堆栈配置为. Net 6(LTS)时才会发生。

    • 我的问题是:**是否有其他解决此问题的方法?我发现为运行的每个webjob添加唯一的端口分配. net 6是一个繁琐且不理想的操作,并且此问题将作为未来开发的一个严重问题而存在。

下面是我引入的依赖项:

Azure.Messaging.ServiceBus Version=7.11.0
Microsoft.Azure.WebJobs Version=3.0.32
Microsoft.ApplicationInsights.AspNetCore Version=2.21.0
Microsoft.ApplicationInsights.NLogTarget Version=2.21.0
Microsoft.Azure.Services.AppAuthentication Version=1.6.2
Microsoft.Azure.WebJobs.Extensions Version=4.0.1
Microsoft.Azure.WebJobs.Extensions.ServiceBus Version=5.3.0
Microsoft.Azure.WebJobs.Extensions.Storage Version=5.0.1
NLog Version=5.0.4
NLog.Targets.Seq Version=2.1.0
NLog.Web.AspNetCore Version=5.1.4

重现:
1.创建两个或多个仅实现Webjobs的. Net Core 6应用程序。我的Webjobs函数处理Service Bus主题消息,不确定是否需要重现。
1.将Webjob应用程序部署到同一应用程序服务计划
1.在每个Web应用的配置刀片设置选项卡中,确保运行时堆栈设置为". Net 6(LTS)",其余设置为默认值。
现在,当您在Azure Portal中查看Web作业时,您将看到该作业卡在重新启动周期中。
问题似乎是围绕设置堆栈设置版本为". Net 6(LTS)"。从this article看,似乎此设置使应用服务运行Kestrel与YARP,我猜功能奇偶性不是1:1与以前的堆栈。

wmvff8tz

wmvff8tz1#

我已经创建了2个.NET Core 6应用程序,并部署到同一个Azure App Service中的Azure Web Jobs

  • 确保在App Service =〉Configuration =〉General Settings中启用Always On选项,以确保WebJobs持续运行。

  • 我已经将堆栈设置运行时版本更新为.NET 6

现在,当您在Azure Portal中查看Web作业时,您将看到该作业卡在重新启动周期中。
是的,即使是我也被同样的问题卡住了。我已经发布了第二版的WebJob正在显示Pending Restart的状态。

单击“Logs(日志)”时,我可以看到下面的错误已记录。

Make sure that you are setting a connection string named >`AzureWebJobsDashboard` in your Microsoft Azure Website >configuration by using the following format >`DefaultEndpointsProtocol=https;AccountName=**NAME**;Account>Key=**KEY**` pointing to the Microsoft Azure Storage account where >the Microsoft Azure WebJobs Runtime logs are stored.
  • 在第二个控制台应用程序中,我尚未配置WebJobs和存储Account
  • 更新代码并再次发布。
  • 现在我可以看到两个作业都处于Running状态。

我的Program.cs文件:

// See https://aka.ms/new-console-template for more information
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace WebJobApp
{
    class Program
    {
        static async Task Main()
        {
            var builder = new HostBuilder();
            builder.UseEnvironment(EnvironmentName.Development);
            builder.ConfigureWebJobs(b =>
            {
                b.AddAzureStorageCoreServices();
                b.AddAzureStorageQueues();
            });
            builder.ConfigureLogging((context, b) =>
            {
                b.AddConsole();
            });
            var host = builder.Build();
            using (host)
            {
                await host.RunAsync();
            }
        }
    }
}

参考取自MSDoc

相关问题