public Task StartAsync <TContext>(IHttpApplication <TContext> application, CancellationToken cancellationToken) { if (application == null) { throw new ArgumentNullException(nameof(application)); } var hostingUrlsPresent = _serverAddresses.Addresses.Count > 0; if (_serverAddresses.PreferHostingUrls && hostingUrlsPresent) { if (_options.UrlPrefixes.Count > 0) { LogHelper.LogWarning(_logger, $"Overriding endpoints added to {nameof(AzureRelayOptions.UrlPrefixes)} since {nameof(IServerAddressesFeature.PreferHostingUrls)} is set to true." + $" Binding to address(es) '{string.Join(", ", _serverAddresses.Addresses)}' instead. "); Listener.Options.UrlPrefixes.Clear(); } foreach (var value in _serverAddresses.Addresses) { Listener.Options.UrlPrefixes.Add(UrlPrefix.Create(value)); } } else if (_options.UrlPrefixes.Count > 0) { if (hostingUrlsPresent) { LogHelper.LogWarning(_logger, $"Overriding address(es) '{string.Join(", ", _serverAddresses.Addresses)}'. " + $"Binding to endpoints added to {nameof(AzureRelayOptions.UrlPrefixes)} instead."); _serverAddresses.Addresses.Clear(); } foreach (var prefix in _options.UrlPrefixes) { _serverAddresses.Addresses.Add(prefix.FullPrefix); } } else if (hostingUrlsPresent) { foreach (var value in _serverAddresses.Addresses) { Listener.Options.UrlPrefixes.Add(UrlPrefix.Create(value)); } } else { LogHelper.LogDebug(_logger, $"No listening endpoints were configured."); throw new InvalidOperationException("No listening endpoints were configured."); } // Can't call Start twice Contract.Assert(_application == null); Contract.Assert(application != null); _application = new ApplicationWrapper <TContext>(application); Listener.Start(); return(Task.CompletedTask); }