Решение проблем с WCF
Опубликовано Артем Макаров on 2020-02-27 10:57
|
|
0. Убедиться, что введены действующие лицензии на продукты КриптоПро.NET и КриптоПро.CSP. Посмотреть лицензии можно через "Управление лицензиями КриптоПро PKI" 1. Убедиться, что установлена последняя версия КриптоПро.NET. Скачать последнюю версию. В случае использования SDK убедиться, что также используется последняя версия. 2. Проверить установленную версию .NET Framework. В настоящий момент поддерживаются версии 4.0 - 4.8 3. Проверить целевую версию .NET Framework под которую собирается проект (target framework в свойствах проекта). В настоящий момент поддерживаются версии 4.0 - 4.8. 4. При использовании целевой версии старше 4.6.2 включительно .NET Framework использует CNG провайдеры по умолчанию, которые не поддерживаются КриптоПро.NET. Для корректной работы необходимо выставить switch DisableCngCertificates=true. Сделать это можно следующим образом: В app.config файле: <configuration> <AppContextSwitchOverrides value="Switch.System.IdentityModel.DisableCngCertificates=true" />
</runtime> </configuration> В web.config файле: <add key="AppContext.SetSwitch:Switch.System.IdentityModel.DisableCngCertificates" value="true" />
</appSettings> Или в коде: private const string DisableCngCertificates = @"Switch.System.IdentityModel.DisableCngCertificate"; 5. При использовании целевой версии старше 4.5 включительно, в случае использования в проекте сборок CryptoPro.Sharpei.ServiceModel.dll и CryptoPro.Sharpei.IdentityModel.dll их необходимо заменить на сборки CryptoPro.Sharpei.ServiceModel45.dll и CryptoPro.Sharpei.IdentityModel45.dll соответственно и пересобрать проект. 6. Убедиться, что для используемой привязки на сервере и клиенте используются одинаковые алгоритмы. В сертификатах сервера и клиента в поле "Открытый ключ" должен быть указан один и тот же алгоритм для сервера и клиента. Смешанные сценарии (ГОСТ 2012 256 + ГОСТ 2012 512) не поддерживаются. 7. Убедиться, что выданы права на закрытый ключ сертификата для учётной записи, от имени которой выполняются приложение. Подробнее. 8. Проверить журналы System (Система) и Application (Приложение) на наличие ошибок через eventvwr.exe. 9. Собрать message и trace лог в момент возникновения ошибки на сервере и клиенте. Подробнее. Пример: <sources>
<source name="System.ServiceModel.MessageLogging" switchValue="All"> <listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default"> <filter type="" />
</add>
<add name="ServiceModelMessageLoggingListener"> <filter type="" />
</add>
</listeners> </source>
<source name="System.ServiceModel" switchValue="All" propagateActivity="true"> <listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default"> <filter type="" />
</add>
<add name="ServiceModelTraceListener"> <filter type="" />
</add>
</listeners> </source>
</sources> <sharedListeners> <add initializeData="C:\logs\my_service_web_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp"> <filter type="" />
</add>
<add initializeData="C:\logs\my_serice_web_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp"> <filter type="" />
</add>
</sharedListeners> <trace autoflush="true" /> </system.diagnostics> 10. При обращении в техподдержку приложить файл конфигурации клиента и сервера, описание используемой привязки, message и trace логи сервера и клиента, все используемые сертификаты и ошибки в журналах Windows. Указать версии .NET Framework, КриптоПро .NET, КриптоПро CSP, целевой .NET Framework. Приложить файл osinfo (Подробнее). По возможности создать тестовый пример решения, содержащего проекты клиента и сервера в вашей конфигурации, на которых воспроизводится ошибка. | |
|