Невозможно прочитать значение ключа свойства из репозитория GIT с помощью Config Server Services в Steeltoe.

Я не могу прочитать значение свойства из git в steeltoe для приложения dot net core 2.1.

Из моего клиентского приложения я хочу прочитать файл свойств, который присутствует в репозитории Git для различных файлов свойств среды, таких как foo-development.properties/foo-Production.properties, в зависимости от среды приложения.

Найдите мой код ниже для чтения данных

Program.cs:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
      WebHost.CreateDefaultBuilder(args)
    .UseCloudFoundryHosting(5000)
    .ConfigureAppConfiguration(b => b.AddConfigServer(new LoggerFactory().AddConsole(LogLevel.Trace)))
    .AddCloudFoundry()   
    .UseUnityServiceProvider()
    .UseStartup<Startup>();

Стартовая страница

public void ConfigureServices(IServiceCollection services)
    {
        services.AddOptions();
        services.ConfigureConfigServerClientOptions(Configuration);
        services.AddConfiguration(Configuration);
        services.ConfigureCloudFoundryOptions(Configuration);           

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        services.AddCors();
        services.AddDiscoveryClient(Configuration);

        //The following setting is tp read config values from json to class
        services.Configure<ConfigSettings>(Configuration.GetSection("ConfigSettings"));

        // Adds the configuration data POCO configured with data returned from the Spring Cloud Config Server
        services.Configure<ConfigServerData>(Configuration);

        services.AddScoped<ApiExceptionFilter>();
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info { Title = "Alcatraz AddUrlLink Service", Version = "v1" });
        });
    }

Страница контроллера

public class HomeController
{
    private IOptionsSnapshot<ConfigServerData> IConfigServerData { get; set; }
    private CloudFoundryServicesOptions CloudFoundryServices { get; set; }
    private CloudFoundryApplicationOptions CloudFoundryApplication { get; set; }
    private IConfigurationRoot Config { get; set; }
    public HomeController(IOptionsSnapshot<ConfigServerData> configServerData, IConfigurationRoot config,
        IOptions<CloudFoundryApplicationOptions> appOptions,
        IOptions<CloudFoundryServicesOptions> servOptions)
    {
        if (configServerData != null)
            IConfigServerData = configServerData;

        // The ASP.NET DI mechanism injects these as well, see
        // public void ConfigureServices(IServiceCollection services) in Startup class
        if (servOptions != null)
            CloudFoundryServices = servOptions.Value;
        if (appOptions != null)
            CloudFoundryApplication = appOptions.Value;

        _service = service;
        Config = config;
        CreateConfigServerDataViewData();
    }

    private void CreateConfigServerDataViewData()
    {
        Console.WriteLine("Started...");
        // IConfigServerData property is set to a IOptionsSnapshot<ConfigServerData> that has been
        // initialized with the configuration data returned from the Spring Cloud Config Server
        if (IConfigServerData != null && IConfigServerData.Value != null)
        {
            try
            {
                if (IConfigServerData != null)
                {
                    Console.WriteLine("Not Null" + IConfigServerData.ToString());
                }
            }
            catch(System.Exception ex) { }

            var data = IConfigServerData.Value; 

            if (IConfigServerData.Value != null)
            {

                Console.WriteLine("Propertis " + data);
                Console.WriteLine("Propertis " + data.foo);
            }
            Console.WriteLine("foo1 " + Config["Foo"]);
            Console.WriteLine("foo2 " + Config["foo"]);
        }
        else
        {
            Console.WriteLine("There is no Properties Files available");
        }

    }
}

Файлы классов

public class ConfigServerData
{
    public string Bar { get; set; }
    public string foo { get; set; }

    // Optional data from vault
    public string Vault { get; set; }
}

файлы myclient.properties и myclient-development.properties в репозитории Git.

foo: Test

Я зафиксировал эти файлы в определенном URL-адресе git. но я не могу получить свойство сообщения в своем клиентском приложении.

Пожалуйста, помогите мне в этом. Заранее спасибо.


person Sumit Manna    schedule 22.01.2019    source источник
comment
Это с сервером конфигурации, работающим на PCF или на локальной рабочей станции? Какой пакет nuget ConfigServer вы используете? Есть ли у вас какие-либо связанные записи журнала?   -  person Tim    schedule 25.01.2019
comment
Да. Я запускаю конфигурацию в PCF. Я использую пакет nuget ниже. Steeltoe.Extensions.Configuration.ConfigServer и Steeltoe.Extensions.Configuration.CloudFoundry   -  person Sumit Manna    schedule 25.01.2019


Ответы (1)


Spring Cloud Config Server на PCF требует авторизации взаимодействия. В версии 2.1 Steeltoe эта авторизация выполняется не в Steeltoe.Extensions.ConfigServer*, а в Pivotal.Extensions.ConfigServer*.

Для вашей ссылки ConfigServer NuGet и оператора using в program.cs измените «Steeltoe» на «Pivotal», и все будет готово.

С этим изменением вы также можете удалить .AddCloudFoundry на WebHostBuilder, так как базовая версия Cloud Foundry Config Provider добавит это за вас.

person Tim    schedule 25.01.2019