#azure #wcf #soap #certificate #channelfactory
#azure #wcf #soap #сертификат #channelfactory
Вопрос:
Когда я запускаю свой ASP dotnet core API локально (в режиме выпуска), он выполняет внешний вызов, используя WCF и clientcertificate (X509Certificate2), возвращая данные правильно. Но когда этот API развертывается как служба приложений Azure, в нем указывается «Учетные данные сертификата клиента не были распознаны». X509Certificate2 загружен из файловой системы правильно (видно из удаленной отладки).
Я попытался выполнить вызов с обычным HttpClient и добавить сертификат, но это дало мне те же результаты. Мы также пытались использовать хранилище сертификатов с аналогичными результатами.
private async Task ProcessRequestAsync(string endpoint, X509Certificate2 certificate, Func<SsoSoapType, Task> action)
{
BasicHttpsBinding binding = new BasicHttpsBinding();
EndpointAddress endpointAddress = new EndpointAddress(new Uri(endpoint));
ChannelFactory<SsoSoapType> factory = new ChannelFactory<SsoSoapType>(binding, endpointAddress);
factory.Credentials.ClientCertificate.Certificate = certificate;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
await action(factory.CreateChannel());
if (factory != null)
{
if (factory.State == CommunicationState.Faulted)
factory.Abort();
else
factory.Close();
}
}
Я ожидаю, что развернутая версия будет вести себя точно так же, как моя локальная версия. Но, по-видимому, это не так.
Может кто-нибудь объяснить, где это происходит неправильно? Или это вызвано некоторыми настройками на портале Azure, которые необходимо соответствующим образом настроить?
С уважением, Джакко
Ответ №1:
Хорошо, после некоторого тщательного исследования я обнаружил, что для моей службы приложений Azure был установлен план хостинга «D1». Это означает, что компьютер совместно используется различными службами приложений и, следовательно, не может использовать хранилище сертификатов (поскольку вы сможете просматривать сертификаты других пользователей).). После обновления до плана хостинга «B1» проблема была решена.