Я работаю с очень старым проектом и перевожу его с локальной на azure ВМ, работающую на windows сервере 2016, и после перемещения мы заметили, что конечная точка API возвращает Bad Gateway (502). Я пересоздал запрос с помощью почтальона и заметил, что я даже не получил ответ. После добавления нескольких журналов я сузил их до метода, описанного ниже, где предполагается считывать маркер безопасности из сертификата. Кажется, что необработанное исключение возникает непосредственно перед кодом, который повторяет каждый сертификат, но я не могу поймать исключение, используя UnhandledExceptionEventHandler. Насколько я вижу, все необходимые сертификаты на месте. Тот, который использовался здесь, я даже дал группе пользователей «Все» полный доступ только для того, чтобы просто исключить это как возможную причину ошибки. В действительности этот метод полон регистрации для каждой строки кода, но я удалил его для удобства чтения.
private static X509SecurityToken GetSecurityTokenBySimpleDisplayName(string simpleDisplayName)
{
if (string.IsNullOrEmpty(simpleDisplayName))
throw new ArgumentNullException("simpleDisplayName");
try
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
using (X509CertificateStore store = X509CertificateStore.LocalMachineStore(X509CertificateStore.MyStore))
{
var isOpen = store.OpenRead();
int certIndex = -1;
/***** HERE IS WHERE IT CRASHES *****/
for (int i = 0; i < store.Certificates.Count; i++)
{
if (store.Certificates[i].SimpleDisplayName.ToLower().Equals(simpleDisplayName.ToLower()))
certIndex = i;
}
if (certIndex < 0)
{
throw new SecurityException("Certificate " + simpleDisplayName + " not found");
}
var token = new X509SecurityToken(store.Certificates[certIndex]);
return token;
}
}
catch(Exception ex)
{
// Logging exception
return null;
}
}
public static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception)args.ExceptionObject;
// Logging exception
}
Журнал событий приложения выдает эту ошибку:
- Неправильное имя приложения: w3wp.exe, версия: 10.0.14393.0, отметка времени: 0x57899b8a
- Неисправное имя модуля: KERNELBASE.dll, версия: 10.0.14393.3383, отметка времени: 0x5ddcba29
- Код исключения: 0xe0434352
- Смещение ошибки: 0x0000000000034c48
- Идентификатор ошибочного процесса: 0x3528
- Время запуска ошибочного приложения: 0x01d5f20898415d08
- Путь неверного приложения: c: \ windows \ system32 \ inetsrv \ w3wp.exe
- Путь неверного модуля: C: \ windows \ System32 \ KERNELBASE.dll
- Идентификатор отчета: 64f16b87-a524-4e0e-9ab9-d8295ce7b29b
- Полное имя ошибочного пакета:
- Идентификатор ошибочного пакета относительно приложения:
Как я могу получить лучшее представление о том, что не так?