Webreport + параметры = обращения к Wwwroot

отредактировано November 2009 Раздел: FastReport .NET
Здравствуйте! Возникла следующая проблема:

исходные данные:
- webreport [v. 1.2.53]
- параметризированный отчет (содержит одну тектовую надпись и два Int32 параметра)
- хостинг - IIS 6.0

проблема: на событии Page_Load метод Report::Prepare() выбрасывает исключение 'Access to the path 'C:\Inetpub\wwwroot\vf01' is denied.'

анализ проблемы: запускаем FileMon и видим следующее

QUERY INFORMATION C:\Inetpub\wwwroot\vf01\Bin\ ACCESS DENIED Attributes: Error
OPEN C:\Inetpub\wwwroot\vf01\ ACCESS DENIED STEND-NOV\IUSR_STEND-NOV
OPEN C:\Inetpub\wwwroot\vf01\ ACCESS DENIED STEND-NOV\IUSR_STEND-NOV

решение проблемы: разрешаем доступ к папке C:\Inetpub\wwwroot\vf01 пользователю STEND-NOV\IUSR_STEND-NOV

итог: все работает :) В чем причина такого поведения? Опять смотрим в FileMon:

QUERY INFORMATION C:\Inetpub\wwwroot\vf01\Bin\ SUCCESS Attributes: D
OPEN C:\Inetpub\wwwroot\vf01\Bin\ SUCCESS Options: Open Directory Access: 00100020
QUERY INFORMATION C:\Inetpub\wwwroot\vf01\Bin SUCCESS Attributes: D
OPEN C:\Inetpub\wwwroot\vf01\Bin SUCCESS Options: Open Directory Access: 00100020
QUERY INFORMATION C:\Inetpub\wwwroot\vf01\Bin\csc.exe NOT FOUND Attributes: Error
QUERY INFORMATION C:\Inetpub\wwwroot\vf01\bin\rsaenh.dll NOT FOUND Attributes: Error
QUERY INFORMATION C:\Inetpub\wwwroot\vf01\bin\rsaenh.dll NOT FOUND Attributes: Error
CLOSE C:\Inetpub\wwwroot\vf01\Bin SUCCESS

?? не понятно зачем происходит обращение к криптосборке rsaenh и почему именно по этому пути?!

Спасибо.

PS на непараметризированном отчете проблема не возникает

Комментарии

  • отредактировано 09:57
    Здравствуйте,

    Можно взглянуть на стек ошибки?
  • отредактировано 09:57
    И еще вопрос - какой режим используется, full trust или medium trust?
  • отредактировано November 2009
    Стек не велик:
    test.FastReport.ApplicationPage.dll!test.FastReport.ApplicationPage.ApplicationPage.LoadReport(test.FastReport.ApplicationPage.FastReportParamsBox paramsBox = {ASP._controltemplates_test_fastreport_fastreportparamsbox_ascx})
    test.FastReport.ApplicationPage.dll!test.FastReport.ApplicationPage.ApplicationPage.OnLoad(System.EventArgs e = {System.EventArgs})

    Код:

    class ApplicationPage : LayoutsPageBase
    {
    ..
    private global::FastReport.Report report;
    ..

    protected override void OnLoad(EventArgs e)
    {
    try
    {
    // ! Событие OnLoad возникает при загрузке страницы и каждый раз при загрузке служебных картинок контрола webTestReport1.
    // Отсекем обращения, вызванные загрузкой картинок.
    if (Request.QueryString["frxbtn"] == null)
    {
    report = LoadReport();
    // далее используем report для отображения списка параметров.
    }
    }
    catch {}
    }

    global::FastReport.Report LoadReport()
    {
    try
    {
    global::FastReport.Report report = new Report();
    ..
    // Загружаем отчет, определяем источники данных.
    ..
    report.Prepare(); // !! ERROR 'Access to the path 'C:\Inetpub\wwwroot\vf01' is denied.'

    return report;
    }
    catch (Exception ex) { }

    return null;
    }

    void webTestReport1_StartReport(object sender, EventArgs e)
    {
    try
    {
    (sender as global::FastReport.Web.WebReport).Report = report;
    }
    catch (Exception ex) { }
    }
    }

    По поводу режима:
    Прописан - <trust level="WSS_Minimal" originUrl="" /> - это режим по умолчанию для Sharepoint (см. приложенный файл wss_minimaltrust.config.txt, описывающий данный режим).
    Отмечу, что сборка с кодом располагается в GAC.
  • отредактировано 09:57
    Боюсь, что в режиме minimal_trust обычный отчет работать не будет, т.к. он требует компиляции при запуске. В некоторых случаях компиляция не требуется (когда в отчете нет скрипта и выражений, которые надо вычислять) - поэтому простейшие отчеты работают. Ситуация описана в руководстве программиста:
    написал:
    В этом режиме работает большинство shared-hosting провайдеров. Он накладывает следующие ограничения:
    · невозможна компиляция кода отчета;
    · невозможна работа с источниками данных MS Access;
    · невозможно использование объекта RichObject;
    · возможны другие ограничения, зависящие от конкретного провайдера.

    Для работы с FastReport в этом режиме используйте способ хранения отчета в виде класса, как описано в разделе "Хранение и загрузка отчета". При этом компиляция отчета в процессе его работы не требуется.

    Кроме того, необходимо, чтобы библиотека System.Windows.Forms.DataVisualization.dll была добавлена в GAC. Эта библиотека является частью Microsoft Chart Control и используется в FastReport для построения диаграмм. Проконсультируйтесь со своим shared-hosting провайдером по поводу добавления этой библиотеки в GAC.
  • отредактировано November 2009
    Спасибо.

    :) документация по FastReport - это моя настольная книга.

    Тем не менее не понятен смысл обращений отчета к 'C:\Inetpub\wwwroot\vf01\Bin\csc.exe' и к 'C:\Inetpub\wwwroot\vf01\bin\rsaenh.dll' :) Судя по логам FileMon именно это и вызывает ошибку доступа.
    К тому же на тестовом отчете с параметрами, которые не используются в выражениях и тд, происходит такая же проблема :)

    PS значит придется разрешать эту проблему путем принудительного разрешения доступа к папке ''C:\Inetpub\wwwroot\vf01' для гостевого пользователя ASP.
  • отредактировано 09:57
    FastReport не обращается напрямую к этим файлам, он вызывает компиляцию отчета через CodeDOM. Скорее всего, это внутренние дела .Net Framework.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.