oracle异常空消息

时间:2017-09-27 02:25:49

标签: c# oracle11g

我使用Oracle Client 11.2.0.4.22构建我的C#ASP.Net应用程序。 当我在本地运行它时,一切都很好,但是当我在测试Web服务器中运行时,它会抛出OracleException并显示空的异常消息。

我发现导致空异常消息的原因之一是dataaccess.dll无法正确加载依赖库。

这是我做的,但仍然没有成功:

  1. 确保本地和测试Web服务器上的oracle版本相同。
  2. 在项目属性上使用x86 dataaccess.dll指定x86的目标平台。
  3. 尝试通过在web-config中指定TraceFileName来获取Oracle的完整跟踪,但似乎IIS服务器没有写入权限。
  4. 以下是例外情况:

    {
      "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. 在Stack Trace上,它实际上是我本地PC上的路径,是否可能是IIS路径问题?因为它也无法写入跟踪文件。

2 个答案:

答案 0 :(得分:0)

之前我们遇到过此问题,加载Oracle.DataAccess.dll似乎存在问题。对我们有用的是我们从项目引用中删除了Oracle.DataAccess.dll并将dll复制到项目文件夹,然后使用复制的文件夹重新添加对dll的引用。

添加回参考后,请设置以下内容:

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

答案 1 :(得分:0)

根本原因是因为IIS用户帐户没有对C:/ Oracle目录的读取权限。

通过向IIS用户帐户提供读取权限来解决此问题。