В нашем приложении сервисной службы есть служба без состояния, которая предоставляет конечную точку HTTP через OwinCommunicationListener
.
Служба ServiceManifest.Xml для этой службы указывает конечную точку службы <Endpoint Name="ServiceEndpoint" Type="Input" Protocol="http" Port="8090" />
Доступ к службе без состояния можно получить через браузер на http://localhost:8090/
То, что мы пытаемся сделать, это создать несколько экземпляров этой службы на разных конечных точках в одном приложении приложения-службы через 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.
Очевидно, что в процессе развертывания проявляется мастерство в использовании, потому что, когда FooInstanceB слушает порт, отличный от того, который указан в конфигурации ServiceEndpoint, служба недоступна.
Первая причина заключается в том, что DACL не установлен на конечной точке, это разрешено путем запуска;
netsh http add urlacl http://+:8091/ user=everyone listen=yes
Это позволяет службам появляться и отображаться здоровыми в Проводнике Fabric, однако FooInstanceB отвечает ошибкой HTTP 503, когда мы получаем доступ с http://localhost:8091/
Как мы можем заставить экземпляры службы прослушивать разные порты?
Я надеюсь, что это понятно, спасибо.