2011-11-29 20 views
7

Tôi có môi trường thử nghiệm cho dịch vụ mà trang web của tôi sẽ sử dụng và môi trường sản xuất. Trong môi trường thử nghiệm của tôi, tôi đã cài đặt ODP.net trên máy chủ. Dịch vụ đó sử dụng Oracle dường như đang chạy khá trơn tru cho đến nay. Tôi dường như không có một khách hàng Oracle chạy trên máy chủ đó cả. Mặt khác tôi có một máy chủ có một máy khách Oracle trên nó, nhưng dường như không có ODP.net được cài đặt trên nó (tôi đang trong quá trình kiểm tra kép, nhưng đó là tình huống của câu hỏi SO này) . Trên máy chủ sản xuất tôi nhận được ngoại lệ này:Cài đặt ODP.net trên máy chủ để giải quyết Oracle.DataAccess.Client.OracleException: Nhà cung cấp không tương thích với phiên bản của máy khách Oracle

Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client 

trong cả hai máy chủ Tôi có dll Oracle.DataAccess trong thùng rác và thư mục lib (không nghĩ rằng tôi cần nó trong thư mục lib, nhưng tại sao gây xáo trộn ... Tôi chắc chắn bạn có thể đưa ra một lý do chính đáng, nhưng không phải ngay bây giờ !!!). Câu hỏi của tôi là tôi cần phải cài đặt ODP.net lên máy chủ sản xuất? Điều đó có giải quyết được bất kỳ vấn đề nào mà bạn gặp phải không? Tôi đã thấy một số bài SO nói rằng điều này giải quyết một vấn đề tương tự cho họ. Bạn có thể giới thiệu một khóa học hành động không? Cảm ơn bạn!

Trả lời

12

Có rất nhiều phiên bản phụ nhỏ của trình khách oracle, và những gì có thể xảy ra là các máy khách oracle được cài đặt trên máy cho lỗi không chính xác giống với phiên bản mà tệp Oracle.DataAccess.dll xuất phát.

Điều tốt nhất cần làm là đảm bảo bạn sử dụng chính xác cùng một gói cài đặt trên mọi máy và máy chủ dev. Điều này sẽ tránh bất kỳ missmatch. Thay vào đó, những gì tôi đã làm trong quá khứ để giải quyết vấn đề này (và nó có thể không phải là điều "tốt nhất" để làm, nhưng nó thường làm việc cho tôi) là cũng sao chép tệp OraOps11.dll sang thư mục \bin của bạn, cùng với tệp Oracle.DataAccess.dll.

Tải tệp từ cùng một oracle cài đặt trên cùng một máy nơi bạn có Oracle.DataAccess.dll. Nó phải ở trong một thư mục có tên như thế này, tùy thuộc vào nơi bạn cài đặt Oracle, và những gì phiên bản:

C: \ oracle \ sản phẩm \ 11.1.0 \ client_1 \ bin \ OraOps11.dll

+0

OraOps11.dll là gì và nó hoạt động như thế nào? Và điều đó sẽ nằm trong thùng ứng dụng của tôi đúng không? – SoftwareSavant

+0

Btw, phiên bản tôi đang sử dụng được sửa đổi lần cuối vào 11/9/2010 1:48 SA. Vì vậy, tôi khá chắc chắn đó là phiên bản tương tự. Cả hai đều là phiên bản 64 bit. – SoftwareSavant

+0

Tôi không hoàn toàn chắc chắn về những gì OraOps11.dll làm, nhưng có, tôi sao chép nó vào bất kỳ thư mục nào của ứng dụng của tôi .exe hoặc .dll của bạn. – CodingWithSpike

0

Thanks ... này đã giúp tôi tiết kiệm thời gian về chuyển đổi frm 32 bit đến 64 bit ứng dụng ASP.Net của chúng tôi ...

trong chi tiết: APP máy chủ tìm kiếm thư viện khách hàng, thậm chí chúng tôi sử dụng remoting thành phần để kết nối để ORACLE db ... với ORACLE client 64 bit ..

Execption tôi đã được giải quyết sau khi sao chép các dll của 5 vào thư mục app/bin của tôi

  1. oci.dll
  2. oraociicu11.dll
  3. oraops11w.dll
  4. orannzsbb11.dll
  5. ociw32. dll

Thông báo lỗi: Trình khởi tạo kiểu cho 'Oracle.DataAccess.Types.OracleString' đã ném một ngoại lệ.

Chi tiết lỗi: System.TypeInitializationException: Trình khởi tạo kiểu cho 'Oracle.DataAccess.Types.OracleString' đã ném một ngoại lệ. ---> Oracle.DataAccess.Client.OracleException Nhà cung cấp không tương thích với phiên bản của Oracle client tại Oracle.DataAccess.Client.OracleInit.Initialize() --- Kết thúc của dấu trừ ngăn xếp bên trong ngăn xếp ---

Theo dõi ngăn xếp của máy chủ: tại System.Runtime.Serialization.FormatterServices.nativeGetUninitializedObject (loại RuntimeType) tại System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObject (ParseRecord pr) tại System.Runtime.Serialization.Formatters.Binary .ObjectReader.ParseMember (ParseRecord pr) tại System.Runtime.Serialization.Formatters.Binary._ BinaryParser.ReadObjectWithMapTyped (BinaryObjectWithMapTyped record) tại System.Runtime.Serializ ation.Formatters.Binary. _BinaryParser.Run() tại System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize (handler HeaderHandler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) tại System.Runtime.Serialization.Formatters.Binary.BinaryFormatter .Deserialize (Stream serializationStream, xử lý HeaderHandler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) tại System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (Stream serializationStream, xử lý HeaderHandler, Boolean fCheck, IMethodCallMessage methodCallMessage) tại hệ thống. Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage (IMessage msg)

Exce ption rethrown tại [0]: tại System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) tại System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, Int32 loại)

5

này làm việc cho tôi một lần tôi chạy chúng:

OraProvCfg /action:config /product:odp /frameworkversion:v2.0.50727 /providerpath:C:\app\Administrator\product\11.2.0\client_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll 

OraProvCfg /action:config /product:odp /frameworkversion:v4.0.30319 /providerpath:C:\app\Administrator\product\11.2.0\client_1\ODP.NET\bin\4\Oracle.DataAccess.dll 

Chúc may mắn

2

tôi phải đối mặt với chính xác cùng một vấn đề, tôi đã cố gắng để sao chép càng nhiều dlls như tôi có thể nhưng không có bất kỳ may mắn.

Cuối cùng, tôi phải cài đặt "ODTwithODAC121012" (32 bit) vào máy chủ (Win 2008 R2 64bit).

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

  • PATH được cập nhật với Oracle dlls 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.
1

Tôi chạy cùng một vấn đề trong Máy chủ Windows 2012 mà tôi đã cài đặt Oracle 10.2.0.3 (phiên bản 10.2 oracle tương thích với 64 bit) và triển khai một trang web sử dụng ứng dụng khách 10.2.0.1 Oracle.

Tôi đã thử tất cả các giải pháp trong bài viết này, nhưng một trong đó làm việc mẫu của tôi là điểm cuối cùng của Abdallah câu trả lời:

"Enable 32bit cho App bơi trong IIS"

Tất nhiên tôi cũng đã triển khai ứng dụng web của tôi với tham chiếu Oracle.Data.Access đúng (10.2.0.3)

Cuối cùng thông báo lỗi đã gây nhầm lẫn cho tôi vì nó khiến tôi bị mù để giải quyết vấn đề phiên bản, nhưng vấn đề thực sự là IIS không có khả năng kích thích ứng dụng 32 bit.

Hy vọng điều này sẽ giúp

Các vấn đề liên quan