Tôi làm theo hướng dẫn tại đây: http://splinter.com.au/blog/?p=156 trong nỗ lực sử dụng phiên bản ODP.NET mới hơn mà không cần cài đặt ứng dụng khách Oracle 11g. Tôi đã theo dõi mọi thứ, cho đến nay, ngoại trừ việc khởi động lại IIS.Oracle oci.dll trong thư mục bin ASP.NET không thể bị xóa/không hoạt động
Tuy nhiên, điều này đã gây ra một số vấn đề và tôi thực sự tò mò là tại sao. Nếu tôi cố gắng sử dụng ODP.NET, tôi gặp một ngoại lệ trống khi kết nối Oracle cố kết nối (ví dụ ConnectExample.Open()).
Nhưng hầu hết tò mò: Tôi không thể xóa oci.dll. Nó nói nó đang được sử dụng. Điều gì có thể được sử dụng dll này? ASP.NET chính xác làm gì với một dll bản địa khi nó nằm trong thư mục Bin? Tôi nghĩ rằng có lẽ đây là một cái gì đó liên quan đến oci.dll, nhưng nếu tôi sử dụng dll trong một thời trang tương tự trong một ứng dụng WinForm máy tính để bàn thì oci.dll không bị khóa, và tôi có thể xóa nó một cách tự do.
Ngoài ra, sau khi tôi đã thử sử dụng nó, System.Data.OracleClient bình thường đã ngừng hoạt động. Nó bây giờ ném một ngoại lệ mà OCIEnvCreate trả về với -1.
Tôi sẽ thử khởi động lại IIS, và hy vọng điều đó sẽ sửa lỗi này, nhưng tôi muốn biết những gì đang xảy ra ở đây (và nếu nó có thể được giải quyết mà không cần khởi động lại IIS). Có ai có ý tưởng gì không?
Edit: Tôi cố gắng khởi động lại IIS và không khắc phục được một điều
Chỉnh sửa # 2: Tôi không nghĩ rằng tôi xây dựng câu hỏi này rất tốt, nhưng đó là do giả định của tôi khởi động lại IIS sẽ làm việc. Bây giờ tôi chỉ cần biết tại sao nó không hoạt động. Trong Googling cho các vấn đề tương tự tôi đã chỉ gặp 2 bài viết diễn đàn mà nói về vấn đề chính xác của tôi: Oracle ODP.NET trả về một ngoại lệ trống khi cố gắng kết nối. Dưới đây là các liên kết đến những:
http://kr.forums.oracle.com/forums/thread.jspa?threadID=632296
http://forums.oracle.com/forums/thread.jspa?threadID=549864
Các liên kết Hàn Quốc trên là thú vị nhất. Họ có một cài đặt đầy đủ dẫn tôi nghi ngờ vấn đề của tôi không phải là với các tập tin hoặc các tập tin bị thiếu. Tôi tự hỏi những gì họ có nghĩa là bởi "máy chủ sản xuất ném ngoại lệ trống nếu một cuộc gọi đến DLL OCI được thực hiện trước khi một ODP có thể được thiết lập"?
Chỉnh sửa/Cập nhật # 3: Chúng tôi có một máy chủ mạng nội bộ ở đây cho bộ phận của chúng tôi mà tôi có thể thử nghiệm vào ngày hôm nay. Tôi đã thêm dll cần thiết vào thư mục Bin và mọi thứ đã làm việc mà không cần phải khởi động lại IIS. Tôi không hỏi. Tôi sẽ thử một số thử nghiệm khác trên máy chủ này để xem liệu tôi có thể sao chép sự cố
Chỉnh sửa # 4 (tiếp tục cuộc phiêu lưu): Tôi xác định rằng oraocci11.dll (C++ giao diện cuộc gọi DLL) là cần thiết ban đầu bởi ASP. NET (hoặc thư viện ODP.NET) để thậm chí tìm thấy các dll khách hàng 11g, sau đó oraocci11.dll dường như không bao giờ được sử dụng một lần nữa và có thể bị xóa. Không chắc chắn điều đó có ý nghĩa gì đối với vấn đề của tôi, nhưng vì nó thêm vào cơ sở tri thức ở đây nên tôi đã đề cập đến nó
Edit # 5: Tôi đã thêm mfc71.dll và msvcr71.dll, 2 tệp hệ thống Windows xử lý C/MFC, vào thư mục Bin khi tôi phát hiện ra chúng cần thiết bởi ODP.NET (hoặc ít nhất, cần thiết bởi máy khách). Điều này, ít nhất, làm mọi thứ ở lại trên lỗi "Khách hàng không tương thích" quen thuộc cũ. Tôi đã loại bỏ 2 tệp DLL đó và chắc chắn rằng nó đã quay trở lại các lỗi giống nhau ở trên. Thêm chúng trở lại không làm cho những lỗi đó biến mất, tuy nhiên, vì vậy tôi sẽ phải thiết lập lại IIS một lần nữa.
ASP.NET sẽ tải Dll khi nó được PInvoked ở đâu đó, Dll sẽ vẫn được tải cho đến khi quá trình ASP.NET được tái chế/khởi động lại. –