Service Fabric Несколько экземпляров службы с переопределением конфигурации
Наше приложение фабрики сервисов включает сервис без сохранения состояния, который предоставляет конечную точку HTTP черезOwinCommunicationListener
.
ServiceManifest.Xml для этой службы указывает конечную точку службы<Endpoint Name="ServiceEndpoint" Type="Input" Protocol="http" Port="8090" />
Затем к службе без сохранения состояния можно получить доступ через браузерHTTP: // локальный: 8090 /
Мы пытаемся создать несколько экземпляров этой службы на разных конечных точках в одном приложении Service Fabric через ApplicationManifest.
ServiceManifestImport
импортирует наш пакет услуг и позволяет переопределять конфигурацию на уровне приложения. Мы не можем переопределить ServiceEndpoint таким образом, только значения в Settings.xml
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="FooServicePkg" ServiceManifestVersion="1.0.0" >
<ConfigOverrides Name="Config">
<Settings>
<SectionName Name="MySettings">
<Parameter Name="MySetting" Value="SomeValue">
</Settings>
</ConfigOverrides>
</ServiceManifestImport>
Мы можем создать именованные экземпляры сервиса, указав несколькоService
узлы подDefaultServices
<DefaultServices>
<Service Name="FooInstanceA">
<StatelessService ServiceTypeName="FooType" InstanceCount="1" />
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="FooInstanceB">
<StatelessService ServiceTypeName="FooType" InstanceCount="1" />
<SingletonPartition />
</StatelessService>
</Service>
</DefaultServices>
Можно ли указать переопределения конфигурации для каждого экземпляра службы через конфигурацию?
Я попытался заставить экземпляры службы прослушивать определенный порт, используя их имя службы, чтобы определить, какой порт FooInstanceA прослушивает на порту 8090, а FooInstanceB - на 8091.
Очевидно, что Service Fabric выполняет некоторые действия во время развертывания, потому что когда FooInstanceB прослушивает порт, отличный от порта, указанного в конфигурации ServiceEndpoint, служба недоступна.
Первая причина в том, что DACL не установлен на конечной точке, это решается запуском;
netsh http add urlacl http://+:8091/ user=everyone listen=yes
,Это позволяет сервисам появляться и работать исправно в Service Fabric Explorer, однако FooInstanceB отвечает сообщением об ошибке HTTP 503, когда мы обращаемся с помощьюHTTP: // локальный: 8091 /
Как мы можем заставить экземпляры службы прослушивать разные порты?
Надеюсь, это понятно, спасибо.