Service Fabric не может найти файл ресурсов - PullRequest
0 голосов
/ 08 февраля 2019

У меня проблема с развертыванием приложения микросервиса в удаленном кластере Service Fabric в Azure.

Приложение состоит из 5 служб, 4 из которых удается запустить, и их состояние отображается как Ready.Однако происходит сбой со следующей ошибкой (состояние изменяется между InBuild и Error на всех узлах):

'System.RA' reported Warning for property 'ReplicaOpenStatus'.
Replica had multiple failures during open on _nt1bm_5. API call: 
IStatelessServiceInstance.Open(); Error = 
System.Resources.MissingManifestResourceException (-2146233038)
Could not find any resources appropriate for the specified culture or the 
neutral culture.  Make sure 
"Microsoft.ServiceFabric.Services.Communication.AspNetCore.SR.resources" was 
correctly embedded or linked into assembly 
"Microsoft.ServiceFabric.AspNetCore" at compile time, or that all the 
satellite assemblies required are loadable and fully signed.
at System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String fileName)
   at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark)
   at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
   at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
   at System.Resources.ResourceManager.GetString(String name, CultureInfo culture)
   at Microsoft.ServiceFabric.Services.Communication.AspNetCore.AspNetCoreCommunicationListener.GetEndpointResourceDescription(String endpointName)
   at Microsoft.ServiceFabric.Services.Communication.AspNetCore.KestrelCommunicationListener.GetListenerUrl()
   at Microsoft.ServiceFabric.Services.Communication.AspNetCore.AspNetCoreCommunicationListener.OpenAsync(CancellationToken cancellationToken)
   at Microsoft.ServiceFabric.Services.Runtime.StatelessServiceInstanceAdapter.OpenCommunicationListenersAsync(CancellationToken cancellationToken)
   at Microsoft.ServiceFabric.Services.Runtime.StatelessServiceInstanceAdapter.System.Fabric.IStatelessServiceInstance.OpenAsync(IStatelessServicePartition partition, CancellationToken cancellationToken)
For more information see: https://aka.ms/sfhealth 

Несколько замечаний:

  • Все службы используют почти точноодна и та же инициализация хоста (порты различаются)
  • Приложение настроено на использование только HTTPS
  • Приложение написано с использованием .NET Core 2.2
  • Текущая версия Service Fabric - 6.4.637.9590
  • Операционная система хоста - Windows Server (вероятно, 2012)
  • В локальном кластере он работает просто отлично
  • При использовании хостинга .NET Core все работает

В чем может быть причина этого?

Как отлаживать такие ошибки?

Доступен ли где-нибудь исходный код Service Fabric для просмотра кода, который не работает?

Если вам нужна дополнительная информация, просто спросите:)

1 Ответ

0 голосов
/ 11 февраля 2019

Я нашел причину этой ошибки!

А именно эта ошибка:

Could not find any resources appropriate for the specified culture or the 
neutral culture.

В решении у нас была своеобразная структура проекта:

  • src:

    • собственный проект (приложение .NET Core, все контроллеры были здесь, как было Startup и т. Д.)
    • Service Fabric Host (он использовалконтроллеры и автозагрузка из собственного проекта имели отдельный Program.cs и конструктор веб-хостов - подходит для Service Fabric)

Оба проекта имели разные appsettings.json - ноимена были одинаковыми ( !!! )

При локальной сборке и упаковке в Visual Studio все было хорошо, но при сборке на DevOps Azure (независимо от используемого типа сборки: dotnet build, Visual Studio build) возникнет странная ошибка.

В пакете, созданном для развертывания (build .sfproj с -t:Package), даже если мы ссылались на проект ServicFabric, appsettings.json иногда были взяты из проекта собственного хоста.(который отличался от appsettings.json от проекта ServiceFabric) Произошла ошибка при попытке прочитать несуществующую запись в appsettings.json

TLDR;

Произошла ошибкаот попытки прочесть несуществующую запись в appsettings.json

Наше текущее решение - использовать разные имена для appsettings.json из разных проектов.Если мы найдем лучшее решение, я обновлю ответ.Также будет полезна любая помощь в этом вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...