Вы не дали понять, как вы представляете эти сервисы, я предполагаю, что вы обращаетесь к ним напрямую с балансировщика нагрузки на порт 443 узла, который сервисы открывают (и совместно используют), вместо использования описанного подхода обратного прокси здесь .
Службы Stateful имеют другое поведение, которое необходимо правильно понимать при регистрации этих портов:
Службы Stateful могут размещать несколько разделов на одном хосте (процессе), дляПо этой причине каждый раздел реплики может использовать один и тот же порт.В этом случае правильный подход, описанный в документах , заключается в регистрации префикса, содержащего в нем идентификатор раздела и реплики. Если вы следовали документам, вы, вероятно, зарегистрировали службы с отслеживанием состояния, например:
private ICommunicationListener CreateInternalListener(ServiceContext context)
{
EndpointResourceDescription internalEndpoint = context.CodePackageActivationContext.GetEndpoint("ProcessingServiceEndpoint");
string uriPrefix = String.Format(
"{0}://+:{1}/{2}/{3}-{4}/",
internalEndpoint.Protocol,
internalEndpoint.Port,
context.PartitionId,
context.ReplicaOrInstanceId,
Guid.NewGuid());
string nodeIP = FabricRuntime.GetNodeContext().IPAddressOrFQDN;
string uriPublished = uriPrefix.Replace("+", nodeIP);
return new HttpCommunicationListener(uriPrefix, uriPublished, this.ProcessInternalRequest);
}
Это сделает службу доступной по URL-адресу, подобному следующему:
{scheme}://{nodeIp}:{port}/{partitionid}/{replicaid}-{guid}
Другая проблема заключается в том, что
- Службы с сохранением состояния могут небыть доступным на всех узлах за балансировщиком нагрузки;
- Если они есть и они разбиты на разделы, каждый раздел не будет доступен на всех узлах;
- , если разделы есть на всех узлах,Вы также должны включить чтение вторичной реплики, иначе конечная точка не будет открыта.
По этим причинам вам следует избегать прямого предоставления сервисов с отслеживанием состояния и размещать их за прокси-сервером, как описано впервая ссылка.