Развертывание приложения с Crystal Reports в IIS - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь развернуть приложение, в котором я использовал Crystal Reports. Я хочу сказать, что оно работает на локальном хосте, так как я использую IIS Express и при подготовке я использую IIS. Это главное различие, о котором я могу думать, но просто чтобы быть уверенным, что я хочу выписать весь процесс, который был выполнен.

  1. Отчет о сборке в Visual Studio
  2. Создать ODBC-соединение на локальном хосте
  3. Запустить отчет на локальном хосте - все работает
  4. опубликовать приложение MVC
  5. добавить ODBC-соединение с тем же именем на сервере
  6. копировать отчет в правильное местоположение на сервере IIS
  7. Запустить приложение и сообщить, что приложение работает, отчет не работает.

Журнал, который я получаю:

FATAL 2018-08-28 03: 22: 30,923 37280ms Служба журнала GenerateReport - Исключение во время StringFormat: индекс (на основе нуля) должен быть больше или равен нулю и меньше размера списка аргументов. Создание отчетов по адресу: 28.08.2008 3:22:30, исключение: CrystalDecisions.CrystalReports.Engine.InternalException: не удалось открыть соединение. QuoteReport 5092_4216_ {0FAD9DBD-DCD7-4158-816D-56895A79B362} .rpt Подробности: [Код поставщика базы данных: 4060] ---> System.Runtime.InteropServices.COMException: Не удалось открыть соединение. QuoteReport 5092_4216_ {0FAD9DBD-DCD7-4158-816D-56895A79B362} .rpt Подробности: [Код поставщика базы данных: 4060] в CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Export (ExportOptions pExportOptions, RequestContext pRequestContext) в CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream (ExportRequestContext reqContext) --- Конец внутренней трассировки стека исключений --- в CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException (исключение e) в CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream (ExportRequestContext reqContext) в CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream (ExportRequestContext reqContext) в CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream (параметры ExportOptions) в CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream (ExportFormatType formatType) в QuickQuote.Controllers.ReportsController.GenerateReport (Int32 reportId, строка json) в C: \ Users \ James \ Source \ Repos \ QuickQuote3 \ QuickQuote \ Controllers \ ReportsController.cs: строка 84 {}

Может кто-нибудь сказать мне, в чем моя проблема? У меня гугл эта ошибка, и я не понимаю, в чем моя проблема.

try
{ 
    var stream = _reportBuilder.BuildReport(dataSet, report, filePath, parameters);
    stream.Seek(0, SeekOrigin.Begin);

    return File(stream, "application/pdf", $"Quote{report.Name}-{DateTime.Now}.pdf");
}
catch (Exception e)
{
    _loggingService.FatalFormat($"Generate Reports at: {DateTime.Now}, Exception: {e}");
    throw;
}

Внутри reportBuilder.BuildReport находится там, где оно ломается. Я уверен, что именно эта строка:

var stream = reportDocument.ExportToStream(ExportFormatType.PortableDocFormat);

Метод BuildReport:

public Stream BuildReport(DataSet dataSet, Report report, string path, string parameters)
{
    var reportDocument = new ReportDocument();
    reportDocument.Load(path);
    reportDocument.SetDataSource(dataSet);
    AddParametersToReport(ref reportDocument, report, parameters);
    return reportDocument.ExportToStream(ExportFormatType.PortableDocFormat);
}

1 Ответ

0 голосов
/ 29 августа 2018

Сообщение об исключении: Failed to open the connection.

Проверьте, правильно ли настроены системные источники данных в ODBC Data Source Administrator (как для 32-разрядных, так и для 64-разрядных).

Вы можете получить ошибку Database logon failed, так как учетные данные, указанные в файле .rpt, могут быть недопустимыми для базы данных. Решение состоит в том, чтобы предоставить учетные данные базы данных в коде:

public Stream BuildReport(DataSet dataSet, Report report, string path, string parameters)
{
    try
    {
        var reportDocument = new ReportDocument();
        reportDocument.Load(path);
        reportDocument.SetDataSource(dataSet);
        AddParametersToReport(ref reportDocument, report, parameters);

        // Set database credentials
        reportDocument.SetDatabaseLogon("dbUsername", "dbPassword");

        return ReportDocument.ExportToStream(ExportFormatType.PortableDocFormat);
    }
    catch(Exception ex)
    {
        _loggingService.FatalFormat($"Exception: {ex}");
        throw;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...