2017-09-27 6 views
0

Oracle Client 11.2.0.4.22を使用してC#ASP.Netアプリケーションを構築しています。 ローカルで実行すると問題はありませんが、テストWebサーバーで実行すると空の例外メッセージが表示され、OracleExceptionがスローされます。oracle exception empty message

空の例外メッセージを引き起こす原因の1つが、依存ライブラリを適切にロードできないdataaccess.dllであることがわかりました。ここで

は私がやったことですが、まだ成功:

  1. は、ローカルおよびテスト、Webサーバー上の確認Oracleのバージョンを確認しないと同じです。
  2. プロジェクトのプロパティとx86 dataaccess.dllを使用して、ターゲットプラットフォームをx86に指定します。
  3. web-configにTraceFileNameを指定してOracleの完全なトレースを取得しようとしますが、IISサーバーに書き込み権限がないように見えます。以下のように

は例外です:

{ 
    "Message": "An error has occurred.", 
    "ExceptionMessage": "", 
    "ExceptionType": "Oracle.DataAccess.Client.OracleException", 
    "StackTrace": " at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) 
        at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src) 
        at Oracle.DataAccess.Client.OracleConnection.Open()\r\n at E3.WebServices.Repositry.OracleE3FDRepository.CheckConnection() in C:\\Users\\lokingwei\\Source\\Repos\\SRV-E3Server - 4.5.2\\E3.WebServices\\E3.WebServices\\Repositry\\OracleE3FDRepository.cs:line 34 
        at E3.WebServices.Controllers.OCAPHistController.GetConnectionCheck(String Env, String Site) in C:\\Users\\lokingwei\\Source\\Repos\\SRV-E3Server - 4.5.2\\E3.WebServices\\E3.WebServices\\Controllers\\OCAPHistController.cs:line 46 
        at lambda_method(Closure , Object , Object[])\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters) 
        at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments) 
        at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken) 
        --- End of stack trace from previous location where exception was thrown --- 
        at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
        at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
        at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext() 
        --- End of stack trace from previous location where exception was thrown --- 
        at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
        at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
        at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext() 
        --- End of stack trace from previous location where exception was thrown --- 
        at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
        at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
        at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()" 
} 

は、ここに私の質問です:

  1. は、他の理由スロー空の例外はありますか?
  2. スタックトレースでは、実際にローカルPC上のパスを特定していますが、IISパスの問題は考えられますか?トレースファイルも書き込むことができないためです。
+0

*「ローカルおよびテストWebサーバーのoracleバージョンが同じであることを確認してください」* - サーバーGACに登録されているoracle.dataaccess.dllが同じであることを確認してください。 - これはあなたのプールとコンパイルに依存します。また、この場合のOra Clientもx86でなければなりません。 * "IISサーバーは書き込み権限を持っていません" * - そう、あなたのアプリケーションプールのIDを正しく設定する –

+0

Oracleのバージョンは同じですが、GAC内のDLLは同じです.Netアプリケーションは、今すぐIISで作業してみてください –

答えて

0

根本的な原因は次のとおりです。

バックの参照を追加した後、次のように設定します。

IISユーザーアカウントへの読み取りアクセス許可を提供することで解決しました。

0

これまでにこの問題が発生しました。問題があると思われます。Oracle.DataAccess.dll私たちのために働いたのは、プロジェクト参照からOracle.DataAccess.dllを削除し、dllをプロジェクトフォルダにコピーし、コピーしたものを使用してdllへの参照を再追加したことです。/Oracleディレクトリ:IISのユーザーアカウントがCに向けて許可を読んだことがありませんので、

Copy Local: True 
Embed Interop Services: False 
Specific Version: False 
+0

コンパイル時にDLLがどこにあるかは関係ありません。 Oraクライアントがサーバーに正しくインストールされている場合、dllはGAC –

+0

に同意します... Oracle.dataaccess.dllの場所を変更するためにすべてを試してみます... Oracle Xcopyに移行するのは良いですか? –