Gre*_*reg 11 c# oracle odp.net oracle11g
我想用Orcale替换Oracle.DataAccess.托管 DataAccess,但打开与后者的连接会引发ORA-12537网络会话文件结束异常.
异常消息/堆栈跟踪
{OracleInternal.Network.NetworkException(0x000030F9):ORA-12537:在OracleInternal.TTC.OraBufReader.Read的OracleInternal.TTC.OraBufReader.GetDataFromNetwork()中的OracleInternal.Network.ReaderStream.Read(OraBuf OB)上的Dateiende(布尔bIgnoreData) )OracleInternal.TTC.TTCProtocolNegotiation.ReadResponse()}中的OracleInternal.TTC.MarshallingEngine.UnmarshalUB1(Boolean bIgnoreData)
我正在尝试连接到Oracle 11g数据库,并且我的本地计算机上没有安装客户端.
使用Oracle.DataAccess 可以正常工作.
using System;
using Oracle.DataAccess.Client;
namespace App.Odp.Unmanaged
{
internal class Program
{
private static void Main(string[] args)
{
//dummy connection string. using SID
string connectionString = "User Id=***;password=***;Data Source=1.2.3.4:1521/sid01;";
try
{
using (var conn = new OracleConnection(connectionString))
{
conn.Open();
using (OracleCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from all_users";
using (OracleDataReader reader = cmd.ExecuteReader())
{
Console.WriteLine("VisibleFieldCount: {0}", reader.VisibleFieldCount);
Console.WriteLine("HiddenFieldCount: {0}", reader.HiddenFieldCount);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error:{0}", ex.Message);
}
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Plattform目标x86
目标框架4.5
使用nuget包官方Oracle ODP.NET,托管驱动程序12.1.21
代码与上述相同.只改变:
using System;
using Oracle.ManagedDataAccess.Client;
//... rest the same as above
Run Code Online (Sandbox Code Playgroud)
只要:
Plattform target 任何CPU
Target Framework 4.5
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<publisherPolicy apply="no" />
<assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
<bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.121.2.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<!--<dataSource alias="MyDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=1.2.3.4)(PORT=1521))(CONNECT_DATA=(SID=sid01)))" />-->
</dataSources>
<settings>
<!--<setting name="SQLNET.AUTHENTICATION_SERVICES" value="NTS"/>-->
</settings>
</version>
</oracle.manageddataaccess.client>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的设置(NTS,none,all)并将连接字符串更改为User Id = XXX; password = XXX; Data Source = MyDataSource; ,但错误保持不变.
在服务器上,我们得到一个ORA-12679:本机服务被其他进程禁用但在alert.log中需要出错.
它似乎与加密有关.在服务器sqlnet.ora中注释掉以下行可以解决问题.
#SQLNET.AUTHENTICATION_SERVICES=(NTS)
#SQLNET.ENCRYPTION_TYPES_SERVER = (rc4_128, rc4_256)
#SQLNET.ENCRYPTION_SERVER=REQUIRED
#ENCRYPTION_WALLET_LOCATION=
# (SOURCE=(METHOD=FILE)(METHOD_DATA=
# (DIRECTORY=...\%ORACLE_SID%\wallet)))
Run Code Online (Sandbox Code Playgroud)
我们如何配置ManagedDataAccess以便它与加密一起使用?
似乎现在使用ODP托管驱动程序12c:https:
//www.nuget.org/packages/Oracle.ManagedDataAccess/
编辑:现在支持 ASO。升级到 ODAC 12c 第 4 版或更高版本。如果这不能解决您的问题,请检查数据库服务器上的alert.log,并调查(google)您尝试连接时发生的任何错误。
原答案:
截至撰写本文时(2015 年 4 月 30 日),ODP.NET 托管驱动程序不支持 Oracle 高级安全选项 (ASO) 加密,这就是导致错误的原因。
这很可能在将来的某个时候得到支持,因此如果您稍后阅读本文,请检查最新的 ODP.NET 文档以了解是否需要升级 ODP.NET。
http://docs.oracle.com/cd/E56485_01/win.121/e55744/InstallConfig.htm#CHDJIDIG
| 归档时间: |
|
| 查看次数: |
19718 次 |
| 最近记录: |