Запустите веб-приложение отдельно от Service Fabric - PullRequest
1 голос
/ 19 марта 2019

У меня есть Service Fabric и веб-сервис.Если я запускаю Service Fabric локально, из Visual Studio, я могу отлаживать свой сервис, и это очень удобно.

Однако развертывание изменений кода в локальной матрице занимает много времени.Я уверен, что должна быть возможность запустить мой сервис отдельно от Service Fabric.Кажется, мне нужно обновить мой метод Main, чтобы он запускал службу по-разному в случае среды разработки.

Есть идеи, что именно следует изменить?

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Использует ли ваша служба какие-либо функции Service Fabric ( Remoting? Пользовательские прослушиватели? И т. Д. ).

Если да , то ваша служба не может быть запущена без среды выполнения Service Fabric .

В случае, если ваша служба является службой ASP.NET Core, настроенной с помощьюWebHost тогда вы можете попробовать следующий подход:

  1. Разделите код, который настраивает WebHost, на отдельный статический метод.Используйте этот метод для инициализации WebHost внутри службы Service Fabric.
  2. В Program.Main вы проверяете Fabric_ApplicationName переменную среды ( это можно сделать с помощью Environment.GetEnvironmentVariable метод ).

    Эта переменная определяется средой выполнения Service Fabric, поэтому, если она определена, ваш код выполняется внутри Service Fabric.

    Если переменная Fabric_ApplicationName определена, то простопродолжить с кодом инициализации службы Service Fabric, в противном случае использовать ранее определенный статический метод для инициализации и экземпляра WebHost и запустить его непосредственно из Program.Main.

Я не уверен,это то, что вы искали, поэтому у вас есть дополнительные вопросы - пожалуйста, задавайте.

Надеюсь, это поможет.

1 голос
/ 20 марта 2019

Ответ Олега Карасика помог сформировать решение.Я пока не использую какие-либо специфические функции 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 >                   
        }
    }
}
...