public Task<string> OpenAsync(CancellationToken cancellationToken)
{
EndpointResourceDescription serviceEndpoint = _serviceInitializationParameters.CodePackageActivationContext.GetEndpoint(_endpointName);
int port = serviceEndpoint.Port;
string appRoot = string.IsNullOrWhiteSpace(_appRoot) ? string.Empty : _appRoot.TrimEnd('/') + '/';
var statefulServiceInitializationParameters = _serviceInitializationParameters as StatefulServiceInitializationParameters;
if(statefulServiceInitializationParameters != null)
{
_listeningAddress = string.Format(
CultureInfo.InvariantCulture,
"http://+:{0}/{1}{2}/{3}/{4}",
port,
appRoot,
statefulServiceInitializationParameters.PartitionId,
statefulServiceInitializationParameters.ReplicaId,
Guid.NewGuid());
}
else if(_serviceInitializationParameters is StatelessServiceInitializationParameters)
{
_listeningAddress = string.Format(CultureInfo.InvariantCulture, "http://+:{0}/{1}", port, appRoot);
}
else
{
throw new InvalidOperationException();
}
_serverHandle = WebApp.Start(_listeningAddress, appBuilder => _startup.Configuration(appBuilder));
string resultAddress = _listeningAddress.Replace("+", FabricRuntime.GetNodeContext().IPAddressOrFQDN);
ServiceEventSource.Current.Message("Listening on {0}", resultAddress);
return Task.FromResult(resultAddress);
}