与Service Fabric分开运行Web应用

时间:2019-03-19 20:51:48

标签: debugging azure-service-fabric visual-studio-debugging

我有Service Fabric和Web服务。如果我从Visual Studio本地运行Service Fabric,则可以调试服务,这非常方便。

但是,将我的代码更改部署到本地结构需要很多时间。 我确定应该有一个选项可以与Service Fabric分开启动我的服务。 看来我需要更新我的方法“ Main”,以便在开发环境下以不同的方式启动服务。

有什么主意应该改变什么?

2 个答案:

答案 0 :(得分:2)

您的服务是否使用Service Fabric的任何功能(远程处理?自定义侦听器?等)。

如果,则没有Service Fabric运行时将无法运行您的服务。

如果您的服务是通过WebHost配置的ASP.NET Core服务,则可以尝试以下方法:

  1. 将配置WebHost的代码分隔为单独的静态方法。使用此方法在Service Fabric服务内部初始化WebHost
  2. 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 >                   
        }
    }
}