gpt4 book ai didi

c# - 删除 Service Fabric App 后进程仍在运行

转载 作者:太空宇宙 更新时间:2023-11-03 12:29:26 26 4
gpt4 key购买 nike

我在删除服务结构应用程序时看到了这一点。应用程序内部服务的旧进程仍在运行。

应用程序中包含的服务类型

  • Actor

  • 无状态服务

  • ASP.NET 核心

我在重新部署应用程序时注意到了这个问题,并且 ASP.NET Core 服务抛出了“EADDRINUSE 地址已在使用”的错误

是否有正确的方法来彻底删除停止服务所有内部进程的应用程序?

流程中是否有可以捕获的取消事件?

我正在使用以下类将其注册为无状态服务。

/// <summary>
/// A specialized stateless service for hosting ASP.NET Core web apps.
/// </summary>
internal sealed class WebHostingService : StatelessService, ICommunicationListener
{
private readonly string _endpointName;

private IWebHost _webHost;

public WebHostingService(StatelessServiceContext serviceContext, string endpointName)
: base(serviceContext)
{
_endpointName = endpointName;
}

#region StatelessService

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[] { new ServiceInstanceListener(_ => this) };
}

#endregion StatelessService

#region ICommunicationListener

void ICommunicationListener.Abort()
{
_webHost?.Dispose();
}

Task ICommunicationListener.CloseAsync(CancellationToken cancellationToken)
{
_webHost?.Dispose();

return Task.FromResult(true);
}

Task<string> ICommunicationListener.OpenAsync(CancellationToken cancellationToken)
{
var endpoint = FabricRuntime.GetActivationContext().GetEndpoint(_endpointName);

string serverUrl = $"{endpoint.Protocol}://{FabricRuntime.GetNodeContext().IPAddressOrFQDN}:{endpoint.Port}";

_webHost = new WebHostBuilder().UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseUrls(serverUrl)
.Build();

_webHost.Start();

return Task.FromResult(serverUrl);
}

#endregion ICommunicationListener
}

然后这样注册

ServiceRuntime.RegisterServiceAsync("WebApiType", context => new WebHostingService(context, "ServiceEndpoint")).GetAwaiter().GetResult();

Thread.Sleep(Timeout.Infinite);

最佳答案

我从空的 WebApi 开始,您可以从服务结构 .NET 核心 WebApi 模板中获得一个。继续添加功能,直到我看到服务没有正常关闭。

我发现我们正在使用 Unity 注入(inject) Controller 。

由于我们不应该注入(inject) Controller ,因此我进行了更新以删除它并通过 Unity 更新了其他注入(inject)以支持内置的 IServiceCollection 注入(inject)。

进行这些更改后,我在升级时没有看到端口已在使用错误。我确实看到旧进程仍在运行,但没有使用任何 CPU 和内存 (0.1M),然后在 10-15 分钟后消失。

关于c# - 删除 Service Fabric App 后进程仍在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43351810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com