Хранение и извлечение переменных сеанса в службах Reporting Services 2008 - PullRequest
1 голос
/ 20 февраля 2009

Есть ли способ установить переменные сеанса во время входа в систему, которые затем будут доступны для отчетов?

У нас есть сервер служб отчетов, куда мы перемещаем и денормализуем данные из нашей системы транзакций для целей отчетности. Чтобы позволить нашим пользователям входить с тем же именем пользователя и паролем из транзакционной системы, мы настроили аутентификацию пользовательских форм, и после долгих проб и ошибок она наконец работает. Кроме того, у нас есть авторизация для доступа к нашей транзакционной системе, поэтому любые изменения в правах пользователя немедленно отражаются в службах Reporting Services.

Наша проблема сейчас в том, что мы хотели бы добавить некоторые дополнительные функции, такие как блокировка параметров в зависимости от полномочий / групп пользователей в нашей транзакционной системе. Мы нашли способ сделать это, но он неэффективен, в основном у нас есть хранимые процедуры, которые будут запрашивать нашу транзакционную систему для проверки доступа. Проблема заключается в том, что эти запросы часто выполняются для каждого запроса отчета, даже если ответ вряд ли изменится. Было бы неплохо иметь доступ к данным уровня сеанса, которые можно установить один раз при входе в систему, а затем получить доступ из отчетов.

Ответы [ 3 ]

1 голос
/ 24 февраля 2009

Используя отражение, вы можете получить доступ к HTTPContext запущенного задания, откуда вы можете получить объект Session (в зависимости от вашей настройки). Мы должны были использовать этот метод для немного другого сценария, связанного с безопасностью: если у вас есть отчет, который использует несколько наборов данных, только первый получает правильный пользовательский контекст. Этот хак позволяет вам получить HTTPContext самостоятельно (который мы используем в пользовательском слое данных).

Выдержка из статьи форума MSDN здесь :

using System.Reflection;
using Microsoft.ReportingServices.Diagnostics;

// This is declared outside of a method body for improved performance,
// since this reflection bit only needs to run once

private static FieldInfo contextField = 
  typeof(RunningJobContext).GetField("m_optionalWebCtx", 
                   BindingFlags.Instance | BindingFlags.NonPublic);

// Call this in your method
HttpContext context = (HttpContext)contextField.GetValue(Globals.JobContext);
0 голосов
/ 24 февраля 2009

У вас определенно больше гибкости при перемещении доступа на сайт asp.net и использовании элемента управления ReportViewer.

Убедитесь, что на компьютере разработчика и на компьютере IIS установлена ​​одна и та же версия элемента управления, версия 9.0.0.0 для VS 2008.

Затем необходимо получить разрешения / доступ между IIS и настройкой сервера отчетов, но это не так уж сложно.

В этот момент у вас есть больше возможностей для настройки, сокрытия и управления всеми параметрами или предоставления собственных элементов управления параметрами.

0 голосов
/ 22 февраля 2009

Нет прямого доступа из SSRS к сеансу . Мои предложения:

  1. создать таблицу в базе данных для размещения всей информации, относящейся к полномочиям / группам, передать идентификатор пользователя в качестве параметра в хранимую процедуру. Проблема - вызвать изменения в этой таблице.
  2. используйте ASP.NET в качестве оболочки для SSRS, поэтому проблем с переменными сеанса не возникнет. Начиная с служб отчетов SQL в приложении ASP.NET
...