When I try to initialize my XConnectClientConfiguration when running on an Azure App Service, the call to cfg.InitializeAsync()
simply hangs. The controller trying to connect to XConnect eventually throws a 500-Timeout.
This same code runs fine when used in a console app.
public static async Task<XConnectClient> CreateXConnectClient(string connectionString, Uri serviceUri)
{
var options = CertificateWebRequestHandlerModifierOptions.Parse(connectionString);
options.AllowInvalidClientCertificates = "true";
var certificateModifiers = new[] { new CertificateWebRequestHandlerModifier(options) };
var clientModifiers = new[] { new TimeoutHttpClientModifier(new TimeSpan(0, 0, 30)) };
var collectionClient = new CollectionWebApiClient(
new Uri(serviceUri, "odata/"),
clientModifiers, certificateModifiers);
var searchClient = new SearchWebApiClient(
new Uri(serviceUri, "odata/"),
clientModifiers, certificateModifiers);
var configurationClient = new ConfigurationWebApiClient(
new Uri(serviceUri, "configuration/"),
clientModifiers, certificateModifiers);
var cfg = new XConnectClientConfiguration(new XdbRuntimeModel(Model.Instance), collectionClient, searchClient, configurationClient, true);
await cfg.InitializeAsync();
var client = new XConnectClient(cfg);
return client;
}
I've validated that I can connect to the XConnect instance from the App Service using the same certificate:
using (var handler = new HttpClientHandler())
{
var certificate = GetCert();
handler.ClientCertificates.Add(certificate);
using (var client = new HttpClient(handler))
{
client.BaseAddress = Settings.XConnectServiceUri;
var response = client.GetAsync("odata").Result;
Show(response.IsSuccessStatusCode
? response.Content.ReadAsStringAsync().Result
: $"Error, received status code {response.StatusCode}: {response.ReasonPhrase}");
}
}
Any ideas?