Мы запускаем локальный кластер Service Fabric (5.4.145.9494), но у нас есть некоторые забавные особенности. Обычно всякий раз, когда мы запускаем приложение (особенно если оно содержит реплики), мы замечаем, что службы не могут запускаться большую часть времени. Внутри SF сообщение об ошибке не так описательно (нездоровый раздел ...), однако в журналах событий становится очевидным, что служба не может запуститься, потому что выбранный ею порт уже используется другим приложением (от процесса svchost до winit практически любое приложение).
В этом случае разработчики НЕ назначают порт сами, поэтому в основном SF должен это выяснить. В нашей настройке мы назначили как временные порты, так и порты приложений согласно https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-manifest и мы попробовали оба варианта, поскольку документация довольно сбивает с толку относительно того, что порты приложений являются подмножеством эфемерных портов, в то время как примеры показывают, что это не так. Еще одна забавная вещь: поскольку конфигурация эфемерных портов в основном изменяет динамический диапазон портов самого окна, все, что мы здесь изменяем, также изменяет диапазоны портов ЛЮБОГО другого приложения, работающего внутри Windows.
Рядом с этим кажется, что SF не пытается использовать другой порт, когда замечает, что порт уже используется, поэтому он также не будет исправлять себя. Простой фрагмент журнала событий:
transport 35d3ce77c0 failed to bind on 0.0.0.0:49160, error = 0x80072740, port 49160 already held by process 204
в этом случае процесс 204 - это spoolsv.exe, но, опять же, это может быть любой процесс.
На данный момент конфигурация узла установлена на:
<NodeType Name="NodeType0">
<Endpoints>
<ClientConnectionEndpoint Port="19000" />
<LeaseDriverEndpoint Port="19002" />
<ClusterConnectionEndpoint Port="19001" />
<HttpGatewayEndpoint Port="19080" Protocol="http" />
<HttpApplicationGatewayEndpoint Port="19081" Protocol="http" />
<ServiceConnectionEndpoint Port="19003" />
<ApplicationEndpoints StartPort="49152" EndPort="50000" />
<EphemeralEndpoints StartPort="49152" EndPort="65534" />
</Endpoints>
Но, как было сказано ранее, мы уже пытались поместить ApplicationEndpoints в свой собственный диапазон, что не исправит ;-).
Любая помощь будет очень приветствоваться ;-)
Мы столкнулись с той же проблемой в нашей локальной среде контроля качества. Мы решили проблему, убедившись, что значение, указанное для [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ MaxUserPort] (https://technet.microsoft.com/en-us/library/aa995661(v=exchg.80).aspx). ниже наименьшего порта, указанного в манифесте кластера Service Fabric (и).
Сначала мы изменили значение MaxUserPort в соответствии с приведенным выше правилом, но после перезагрузки его значение было сброшено. Видя это, мы адаптировали значения ApplicationEndpoints и EphemeralEndpoints кластера SF, и среда выполнения SF больше не жалуется.