private static List <EndpointInstance> ExtractEndpoints(ServiceReplicaList replicas, Partition partition, Uri service) { List <EndpointInstance> endpointInstances = new List <EndpointInstance>(); foreach (var replica in replicas) { if (replica.ReplicaAddress.Length == 0) { continue; } JObject addresses; try { addresses = JObject.Parse(replica.ReplicaAddress); } catch { continue; } var endpoints = addresses["Endpoints"].Value <JObject>(); foreach (var endpoint in endpoints) { var endpointName = endpoint.Key; var endpointAddress = endpoint.Value.ToString(); if (!endpointAddress.StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) { continue; } EndpointType endpointType = null; if (partition.ServiceKind == ServiceKind.Stateful) { var statefulRole = ((StatefulServiceReplica)replica).ReplicaRole; ServiceEndpointRole role; switch (statefulRole) { case ReplicaRole.Primary: role = ServiceEndpointRole.StatefulPrimary; break; case ReplicaRole.ActiveSecondary: role = ServiceEndpointRole.StatefulSecondary; break; default: role = ServiceEndpointRole.Invalid; break; } switch (partition.PartitionInformation.Kind) { case ServicePartitionKind.Singleton: endpointType = EndpointType.CreateSingleton(service.AbsolutePath, partition.PartitionInformation.Id, endpointName, endpoints.Count == 1, role); break; case ServicePartitionKind.Int64Range: var rangePartitionInformation = (Int64RangePartitionInformation)partition.PartitionInformation; endpointType = EndpointType.CreateInt64Partitioned(service.AbsolutePath, partition.PartitionInformation.Id, endpointName, endpoints.Count == 1, role, rangePartitionInformation.LowKey, rangePartitionInformation.HighKey); break; case ServicePartitionKind.Named: var namedPartitionInformation = (NamedPartitionInformation)partition.PartitionInformation; endpointType = EndpointType.CreateNamedPartitioned(service.AbsolutePath, partition.PartitionInformation.Id, endpointName, endpoints.Count == 1, role, namedPartitionInformation.Name); break; case ServicePartitionKind.Invalid: break; default: throw new ArgumentOutOfRangeException(); } } else { endpointType = EndpointType.CreateStateless(service.AbsolutePath, partition.PartitionInformation.Id, endpointName, endpoints.Count == 1); } if (endpointType != null) { var endpointInstanceObject = new EndpointInstance(endpointType, new Uri(endpointAddress), replica.NodeName); endpointInstances.Add(endpointInstanceObject); } } } return(endpointInstances); }