На моей машине для разработки (Win7 x64, IIS 7.5, SSRS 2008R2 x64) у меня есть приложение ASP.Net (пул приложений с «Включить 32-разрядные приложения», установленный на «True»), подключающийся к серверу базы данных Oracle,с использованием поставщика данных Oracle для .Net 32 бита (ODAC 11.2.0.1.0, Oracle.DataAccess 2.112.1.0.).IIS 7.5 и SSRS 2008 R2 работают на одном компьютере разработчика.Oracle работает на тестовом сервере.
Работает нормально, за исключением случаев, когда я встраиваю отчет из SSRS 2008 R2 с использованием ReportViewer, например так:
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)
Соответствующее сообщение, которое я думаю: « Эта проблема возникает при работе в 64-битном режиме с установленными 32-битными клиентскими компонентами Oracle. »
Также, вДиспетчер задач, который я проверил, Reporting Services работает как 64-битный процесс (ReportingServicesService.exe), а мое приложение работает на 32 битах (w3wp.exe * 32).
Однако при разработке отчета он работает нормально, используя «.Net Framework Data Provider for Oracle», который, как мне кажется, предоставлен Microsoft.
Итак, я пришел к выводу, что существует конфликтмежду моим приложением ASP.Net (работающим как 32-разрядная версия) и моими отчетами, опубликованными на сервере SSRS 2008 R2 x64.
Итак, мой вопрос, как я могу встроить эти отчеты SSRS в мое приложение ASP.Net?
Некоторые альтернативы, о которых я подумал:
- Diable «Включить 32-разрядные приложения» в пуле приложений на IIS, поэтому он будет работать как 64-разрядный.
- Изменить процесс SSRS на 32-битный.(Это вообще возможно?)
Кроме того, я опубликовал отчеты на другом сервере (SSRS 2008 R2 x64 на Win 2008 R2 x64) и могу без проблем встраивать их в мой ASP.Чистое 32-битное приложение на моей машине для разработки.
Любая помощь будет принята с благодарностью.