#asp.net-core #.net-core #.net-5 #oracle19c #odp.net-managed
#asp.net-core #.net-ядро #.net-5 #oracle19c #odp.net-управляемый
Вопрос:
У меня приложение .net 5/6, и из-за требований соответствия меня просят использовать oracle wallet с прокси-пользователем (в строке подключения нет пароля). Чтобы упростить: новая строка подключения: Data Source=myproxy; User Id=/;
Я поместил следующие файлы в текущий рабочий каталог, т.е. bin / debug / net5.0:
- tnsnames.ora
пример данных файла:
myproxy=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhostip)(PORT=myport))(CONNECT_DATA= (SERVICE_NAME =myservname)(SERVER=DEDICATED)))
- sqlnet.ora
пример данных файла
SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_VERSION = 0
WALLET_LOCATION =(SOURCE =(METHOD = FILE)(METHOD_DATA =(DIRECTORY=mydirectorieswallets)))
У меня есть приложение .net framework, которое отлично работает с вышеуказанными файлами и кошельками. Но, похоже, я не могу заставить его работать с приложением .Net Core. Я даже использовал OracleConfiguration.OnsWalletLocation
, но мне совсем не повезло.
Вот пример ошибки:
Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01017: invalid username/password; logon denied
at OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, OracleConnection connRefForCriteria, String affinityInstanceName, Boolean bForceMatch)
at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, OracleConnection connRefForCriteria, String affinityInstanceName, Boolean bForceMatch)
at OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword, OracleConnection connRefForCriteria)
at Oracle.ManagedDataAccess.Client.OracleConnection.Open()
Ответ №1:
Вы должны использовать драйвер Oracle 19 DB для .NET Core вместо использования Oracle.ManagedDataAccess.Client
. Это Oracle.ManagedDataAccess.Client
специфично для .NET Framework.
Драйвер Oracle 19 DB для .NET Core доступен при вызове nuget, Oracle.ManagedDataAccess.Core
а ссылка на nuget находится по адресу: https://www.nuget.org/packages/Oracle .ManagedDataAccess.Core /
Используйте Oracle.ManagedDataAccess.Core
версию 3.21.4 или более позднюю для поддержки .NET 5.0, и этот nuget рекомендуется использовать для Oracle 12c или более поздней версии (например, Oracle 19).
Комментарии:
1. Я использую Oracle. ManagedDataAccess. Ядро 3.21.41. Я обновил заголовок вопроса. По ODP.Net Ядро, я имел в виду Oracle. ManagedDataAccess. Ядро, моя ошибка. Но с этим не повезло.
Ответ №2:
Мне удалось запустить oracle wallet с приложением .net5. Для меня на уровне приложения не было ничего плохого, кроме oracle wallet. Oracle wallet с прокси-пользователем у меня не работает, но я смог запустить oracle wallet с пользователем схемы и паролем.
Помимо создания кошелька, все остальное такое же, как и в приведенном выше вопросе. Вот команды создания кошелька, чтобы дать вам представление о том, что работает, а что нет.
Кошелек, который работает:
- Создать кошелек
mkstore -wrl . -create
- Создать учетные данные
mkstore -wrl . -createCredential myproxy mySchemaUserName mySchemaUserPassword
Кошелек, который не работает:
- Создать кошелек
mkstore -wrl . -create
- Создать учетные данные
mkstore -wrl . -createCredential myproxy myProxyUserName[mySchemaUserName] myProxyUserPassword
Убедитесь, что у вас есть Oracle.ManagedDataAccess.Core nuget в вашем решении, файлы tnsnames.ora и sqlnet.ora в вашей папке bin / debug или bin / debug / net5.0. Данные внутри файлов tnsnames.ora и sqlnet.ora должны быть такими, как в приведенном выше вопросе.