Service Fabric Várias instâncias de serviço com substituição de configuração
Nosso aplicativo de malha de serviço inclui um serviço sem estado que expõe um terminal HTTP por meio deOwinCommunicationListener
.
O ServiceManifest.Xml para este serviço especifica o terminal em serviço<Endpoint Name="ServiceEndpoint" Type="Input" Protocol="http" Port="8090" />
O serviço sem estado pode ser acessado através de um navegador nahttp: // localhost: 8090 /
O que estamos tentando fazer é instanciar várias instâncias desse serviço em terminais diferentes no mesmo aplicativo do Service Fabric por meio do ApplicationManifest.
oServiceManifestImport
importa nosso pacote de serviços e permite substituições de configuração no nível do aplicativo. Não podemos substituir o ServiceEndpoint dessa maneira, apenas os valores em 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>
Podemos criar instâncias nomeadas do serviço especificando váriosService
nós sobDefaultServices
<DefaultServices>
<Service Name="FooInstanceA">
<StatelessService ServiceTypeName="FooType" InstanceCount="1" />
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="FooInstanceB">
<StatelessService ServiceTypeName="FooType" InstanceCount="1" />
<SingletonPartition />
</StatelessService>
</Service>
</DefaultServices>
É possível especificar substituições de configuração por instância de um serviço através da configuração?
Tentei fazer com que as instâncias de serviço escutassem em uma porta específica usando o nome do serviço para descobrir qual porta o FooInstanceA escuta na porta 8090 e o FooInstanceB escuta no 8091.
Claramente, o Service Fabric está fazendo alguma mágica durante a implantação, porque quando FooInstanceB escuta em uma porta diferente daquela especificada na configuração do ServiceEndpoint, o serviço não está acessível.
O primeiro motivo é que o DACL não está definido no nó de extremidade; isso é resolvido executando;
netsh http add urlacl http://+:8091/ user=everyone listen=yes
,Isso permite que os serviços apareçam e mostrem integridade no Service Fabric Explorer; no entanto, o FooInstanceB está respondendo com um erro HTTP 503 quando acessamos comhttp: // localhost: 8091 /
Como podemos fazer com que as instâncias de serviço escutem em portas diferentes?
Espero que esteja claro, obrigado.