2013-07-02 32 views
5

Chúng tôi đang sử dụng phiên bản lắp ráp Oracle.DataAccess.dll 2.102.2.20 (32 bit).Cách khắc phục "Nhà cung cấp không tương thích với phiên bản máy khách Oracle"?

tôi triển khai ứng dụng Web API của chúng tôi để IIS và cố gắng khai mạc và bế mạc kết nối:

private static void CheckConnectionUsingOracleClient(string connection) 
     { 
      var logger = DiContainer.Resolve<ILogger>(); 

      try 
      { 
       logger.LogInfo("Trying to connect to " + connection); 
       // check whether you can connect to the shop using Oracle.DataAccess 
       using (var cnn = new Oracle.DataAccess.Client.OracleConnection(connection)) 
       { 
        cnn.Open(); 
        cnn.Close(); 
       } 

       logger.LogInfo("Succeeded to connect to " + connection); 
      } 
      catch (System.Exception ex) 
      { 
       logger.LogError("Failed to connect to " + connection, ex); 
      } 
     } 

Trên máy tính địa phương của tôi nó là tốt, nhưng trên máy chủ này nó ném một ngoại lệ khi cố gắng initalize các các OracleConnection:

Trình khởi tạo kiểu cho 'Oracle.DataAccess.Client.OracleConnection' đã ném một ngoại lệ. ---> Oracle.DataAccess.Client.OracleException: Nhà cung cấp không tương thích với các phiên bản của Oracle client

Tôi đã cài đặt Oracle khách hàng 11,2 (32 bit) trên máy chủ và tôi có thể thấy rằng trong GAC (c: \ windows \ assembly) lắp ráp Oracle.DataAccess được cài đặt trong kiến ​​trúc bộ vi xử lý 32 bit. Nó hoạt động tốt trên một trong các máy chủ của chúng tôi nhưng không hoạt động với máy chủ này.

Trong IIS, tôi đã đặt 'Bật ứng dụng 32 bit' trên Hồ bơi ứng dụng.

Làm cách nào để khắc phục? Tôi đã dành hơn 10 tiếng đồng hồ cho đến nay cố gắng điều khác nhau :(

Tôi lý tưởng muốn để có thể sử dụng Oracle.DataAccess.dll mà không cần phải cài đặt một khách hàng của Oracle trên máy chủ.

+0

Có thể vấn đề với trình điều khiển của đầu nối. Hãy thử gỡ bỏ/cài đặt các phiên bản khác. – PiLHA

+0

Bản sao có thể có của http://stackoverflow.com/questions/659341/the-provider-is-not-compatible-with-the-version-of-oracle-client – cremor

Trả lời

3

Oracle .DataProvider phiên bản 2.102.2.20 decripted

2: phiên bản Net (có thể 1 cho Net 1 - 1.1, 2 trong 2 - 3,5 đến 4 trong 4 - 4,5)

102: Oracle phiên bản : Oracle 10.2

2.20: Truy cập dữ liệu Oracle phiên bản

Bạn nên kiểm tra

  1. phiên bản Net (không nên cao hơn so với trình biên dịch Net của bạn)

  2. Oracle phiên bản client (không được vượt quá Phiên bản Oracle Client)

  3. Cả khách hàng Oracle và Oracle.DataProvider là 64 bit hoặc Oracle.DataProvider là 32 bit và Oracle client là 32 bi t hoặc hỗ trợ di sản chế độ 32 bit

+0

Tôi đang làm việc với .NET 4.5. Oracle Client phiên bản 11.2 được cài đặt trong một máy tính khác và nó hoạt động tốt. Tất cả đều là 32 bit. –

0

Sau khi cài đặt chắc chắn:

  • PATH được cập nhật với dlls Oracle vị trí: \ sản phẩm \ 12.1.0 \ client_1 \ bin và \ sản phẩm \ 12.1.0 \ client_1
  • Khởi động lại máy chủ.
  • Bật 32 bit cho App Pool trong IIS.
4

bạn có thể cài đặt Oracle.ManagedDataAccess sử dụng Package Manager Console nuget

Pm> Install-Package Oracle.ManagedDataAccess 

ODP.NET, Driver Managed là một trình điều khiển mã nguồn gốc NET 100%. Không cần thêm phần mềm Oracle Client để cài đặt để kết nối với cơ sở dữ liệu Oracle.

Cập nhật Mã

using Oracle.ManagedDataAccess.Client; 
private static void CheckConnectionUsingOracleClient(string connection) 
     { 
      var logger = DiContainer.Resolve<ILogger>(); 

      try 
      { 
       logger.LogInfo("Trying to connect to " + connection); 
       // check whether you can connect to the shop using Oracle.DataAccess 
       using (var cnn = new OracleConnection(connection)) 
       { 
        cnn.Open(); 
        cnn.Close(); 
       } 

       logger.LogInfo("Succeeded to connect to " + connection); 
      } 
      catch (System.Exception ex) 
      { 
       logger.LogError("Failed to connect to " + connection, ex); 
      } 
     } 
Các vấn đề liên quan