我有Service Fabric和Web服务。如果我从Visual Studio本地运行Service Fabric,则可以调试服务,这非常方便。
但是,将我的代码更改部署到本地结构需要很多时间。 我确定应该有一个选项可以与Service Fabric分开启动我的服务。 看来我需要更新我的方法“ Main”,以便在开发环境下以不同的方式启动服务。
有什么主意应该改变什么?
答案 0 :(得分:2)
您的服务是否使用Service Fabric的任何功能(远程处理?自定义侦听器?等)。
如果是,则没有Service Fabric运行时将无法运行您的服务。
如果您的服务是通过WebHost
配置的ASP.NET Core服务,则可以尝试以下方法:
WebHost
的代码分隔为单独的静态方法。使用此方法在Service Fabric服务内部初始化WebHost
。在Program.Main
中检查Fabric_ApplicationName环境变量(可以使用Environment.GetEnvironmentVariable方法完成)。
此变量由Service Fabric运行时定义,因此,如果定义了该变量,则您的代码正在Service Fabric内部运行。
如果定义了Fabric_ApplicationName
变量,则继续执行Service Fabric服务初始化代码,否则使用先前定义的静态方法初始化WebHost
的实例,并直接从{{1}运行它}。
我不确定这是否是您想要的东西,所以我还有其他问题-请询问。
希望有帮助。
答案 1 :(得分:1)
Oleg Karasik的回应帮助制定了解决方案。 我尚未使用任何Service Fabric特定功能,因此可以解决。
我唯一需要修改的代码是Program类:
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.ServiceFabric.Services.Runtime;
using System;
using System.Diagnostics;
using System.Threading;
namespace MyNameSpace
{
internal static class Program
{
private static void Main()
{
if (string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("Fabric_ApplicationName")))
{
StartInIISExpress();
}
else
{
StartInServiceFabric();
}
}
private static void StartInIISExpress()
{
WebHost.CreateDefaultBuilder()
.UseStartup<Startup>()
.Build().Run();
}
private static void StartInServiceFabric()
{
< original code of the method Main >
}
}
}