Я использую элемент управления ReportViewer для доступа к отчету SSRS 2008 из веб-приложения VS2010 ASP.NET MVC 2, развернутого на IIS7 со следующей настройкой:
- Проверка подлинности с помощью форм и анонимная проверка подлинности включены
- Олицетворение ASP.NET отключено
- Удостоверение пула приложений, настроенное для использования локальной учетной записи пользователя с правами доступа к определенным папкам на сервере, требуемым приложением
- Веб-сервер не является частьюдомена, но сервер SSRS находится в домене
Поскольку мне нужно использовать отдельные учетные данные для доступа к отчетам SSRS, я реализовал IReportServerCredentials, как описано здесь:
http://msdn.microsoft.com/en-us/library/microsoft.reporting.webforms.ireportservercredentials(v=vs.100).aspx
Проблема, с которой я сталкиваюсь, заключается в том, что она всегда идет к IReportServerCredentials.ImpersonationUser вместо IReportServerCredentials.NetworkCredentials, куда мне это нужно, потому что я получаю необходимые учетные данные из web.config.
Может бытьЯ упускаю что-то простое здесь, но я пробовал разныеСочетание этих настроек и не повезло.Любые указатели на то, как я могу получить эту работу, будут очень благодарны!
Мой код:
[Serializable]
public sealed class MyReportServerCredentials :
IReportServerCredentials
{
public WindowsIdentity ImpersonationUser
{
get
{
// Use the default Windows user. Credentials will be
// provided by the NetworkCredentials property.
return null;
}
}
public ICredentials NetworkCredentials
{
get
{
// Read the user information from the Web.config file.
// By reading the information on demand instead of
// storing it, the credentials will not be stored in
// session, reducing the vulnerable surface area to the
// Web.config file, which can be secured with an ACL.
// User name
string userName =
ConfigurationManager.AppSettings
["MyReportViewerUser"];
if (string.IsNullOrEmpty(userName))
throw new Exception(
"Missing user name from web.config file");
// Password
string password =
ConfigurationManager.AppSettings
["MyReportViewerPassword"];
if (string.IsNullOrEmpty(password))
throw new Exception(
"Missing password from web.config file");
// Domain
string domain =
ConfigurationManager.AppSettings
["MyReportViewerDomain"];
if (string.IsNullOrEmpty(domain))
throw new Exception(
"Missing domain from web.config file");
return new NetworkCredential(userName, password, domain);
}
}
public bool GetFormsCredentials(out Cookie authCookie,
out string userName, out string password,
out string authority)
{
authCookie = null;
userName = null;
password = null;
authority = null;
// Not using form credentials
return false;
}
}
this.MyReportView.ServerReport.ReportServerCredentials = new MyReportServerCredentials();
Спасибо