在Win7 x64上使用IIS 7.5(启用32位应用程序)上的Oracle ODAC11.2.0.1.0从ASP.NET应用程序中获取SSRS 2008R2 x64报告

时间:2011-12-14 22:09:02

标签: asp.net oracle reporting-services iis-7.5 32bit-64bit

在我的开发机器上(Win7 x64,IIS 7.5,SSRS 2008R2 x64),我有一个连接到Oracle数据库服务器的ASP.Net应用程序(将“启用32位应用程序”设置为“True”的应用程序池),使用Oracle Data Provider for .Net 32​​位(ODAC 11.2.0.1.0,Oracle.DataAccess 2.112.1.0。)。 IIS 7.5和SSRS 2008 R2在同一台开发计算机上运行。 Oracle在测试服务器上运行。

它运行正常,除非我使用ReportViewer从SSRS 2008 R2嵌入报告,如下所示:

    reportViewer.ProcessingMode = ProcessingMode.Remote
    reportViewer.ServerReport.ReportServerCredentials = New ReportServerCredentials()
    Dim serverReport As ServerReport
    serverReport = reportViewer.ServerReport
    serverReport.ReportPath = "/" + ReportServerCredentials.ReportFolder + "/rptParteIngreso"
    serverReport.ReportServerUrl = New Uri(ReportServerCredentials.urlServerReporting)
    Dim parameters() As ReportParameter = {P_IDPAIS, P_FECHAINICIO, P_FECHAFIN, P_NROPARTE, P_FLAGAPROBING}

    Try
        serverReport.SetParameters(parameters)
    Catch ex As Exception
        MessageBoxs.Show(ex.InnerException.ToString())
    End Try

它会抛出以下错误:

Microsoft.Reporting.WebForms.ReportServerException was unhandled by user code
  ErrorCode=rsProcessingAborted
  Message=Error al procesar el informe. (rsProcessingAborted)
  Source=Microsoft.ReportViewer.WebForms
  StackTrace:
       en Microsoft.Reporting.WebForms.ServerReportSoapProxy.OnSoapException(SoapException e)
       en Microsoft.Reporting.WebForms.Internal.Soap.ReportingServices2005.Execution.RSExecutionConnection.ProxyMethodInvocation.Execute[TReturn](RSExecutionConnection connection, ProxyMethod`1 initialMethod, ProxyMethod`1 retryMethod)
       en Microsoft.Reporting.WebForms.Internal.Soap.ReportingServices2005.Execution.RSExecutionConnection.SetExecutionParameters(ParameterValue[] Parameters, String ParameterLanguage)
       en Microsoft.Reporting.WebForms.ServerReport.SetParameters(IEnumerable`1 parameters)
.....
       en System.Web.UI.Control.OnLoad(EventArgs e)
       en System.Web.UI.Control.LoadRecursive()
       en System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
       ErrorCode=rsErrorOpeningConnection
       Message=Cannot create a connection to data source 'DSRRHH'. (rsErrorOpeningConnection)
       InnerException: Microsoft.Reporting.WebForms.ReportServerException
            Message=El intento de cargar las bibliotecas de clientes de Oracle lanzó BadImageFormatException. **Este problema ocurrirá al ejecutar el modo 64 bits con los componente cliente de Oracle de 32 bits instalados**.
            InnerException: Microsoft.Reporting.WebForms.ReportServerException
                 Message=Se ha intentado cargar un programa con un formato incorrecto. (Excepción de HRESULT: 0x8007000B)

我认为相关的消息是“在安装了32位Oracle客户端组件的64位模式下运行时会出现此问题。

此外,在任务管理器上,我已检查Reporting Services是作为64位进程(ReportingServicesService.exe)运行而我的应用程序是以32位运行(w3wp.exe * 32)。

但是,在设计报表时,使用“.Net Framework Data Provider for Oracle”可以正常工作,我认为这是由Microsoft提供的。

因此,我的结论是我的ASP.Net应用程序(以32位运行)与我在SSRS 2008 R2 x64服​​务器上发布的报告之间存在冲突。

所以,我的问题是,如何在我的ASP.Net应用程序中嵌入这些SSRS报告?

我想过的一些替代方案:

  1. 在IIS上的应用程序池上启用“启用32位应用程序”,因此它将以64位运行。
  2. 将SSRS进程更改为32位运行。 (这是否可行?)
  3. 此外,我已将报告发布到另一台服务器(Win 2008 R2 x64上的SSRS 2008 R2 x64),我可以在我的开发机器上使用我的ASP.Net 32​​位应用程序轻松嵌入它们。

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

解决。

在IIS上的应用程序池上安装.Net 64位(ODAC 11.2.0.1.0,Oracle.DataAccess 2.112.1.0。)并禁用“启用32位应用程序”的Oracle数据提供程序,因此它将以64-运行位。

这样,它可以连接到SSRS 2008 R2 64位