Especificando conexões e credenciais para o Controle do Servidor Web do ReportViewer
Para especificar uma conexão a partir de ReportViewer controle para o servidor de relatório, é útil para saber as condições sob as quais as conexões são feitas.
Na inicialização quando a página da Web que contém o controle ReportViewer é carregada, o controle se conecta ao servidor de relatório para estabelecer a sessão de relatório, obter ou definir propriedades de parâmetro de relatório e recuperar a lista de extensões de renderização que estão disponíveis no servidor.
Se o controle estiver sendo executado com AsyncRendering=true, o HTML para o relatório é recuperado de maneira assíncrona por um objeto IFrame depois que a página é processada.
Se o relatório faz referência a uma imagem externa, o ReportViewer controle recupera as imagens por meio de solicitações separadas usando a ReportViewer manipulador HTTP, em que cada solicitação é feita em sua própria conexão.
Depois que o relatório é renderizado, as conexões adicionais podem ocorrer se você exportar um relatório renderizado em um formato diferente. Uma solicitação de exportação é enviada do navegador para o servidor de relatório usando uma conexão separada.
O êxito de todas essas operações depende se o ReportViewer controle tem informações de conexão válida para o servidor de relatório. Como especificar informações de conexão varia dependendo de fatores como se você estiver usando autenticação de formulários, autenticação do Windows, as credenciais do usuário atual ou sessão do ASP.NET.
Como especificar conexões
Para se conectar ao servidor, você pode definir propriedades no ServerReport de objeto ou implementar interfaces que definir a conexão e, em seguida, especificam a implementação no arquivo Web. config. O ReportViewer controle sempre lê o arquivo Web. config primeiro e usa os valores de conexão se eles forem especificados.
Se o estado da sessão é habilitado, você pode optar por definir propriedades de ServerReport de objeto ou especificar informações de conexão no arquivo Web. config. Se você especificar informações de conexão no Web. config, não defina propriedades no ServerReport objeto.
Se o estado da sessão é desativado, você deve implementar IReportServerConnection ou IReportServerConnection2 e especifique a implementação no arquivo Web. config.
Dica
A conta de usuário sob a qual a conexão é feita deve ter uma atribuição de função válido no servidor de relatório.Atribuições de função de nível de sistema e de item são usadas para criar um conjunto abrangente de permissões.Se você não estiver familiarizado com as atribuições de função de servidor de relatório, você pode seguir um tutorial para aprender os conceitos básicos de atribuição de função.Para obter mais informações, consulte Tutorial: definindo permissões no Reporting Services no MSDN.
Definindo propriedades no objeto ServerReport
Você pode definir propriedades de URL e o tempo limite de servidor de relatório no ServerReport quando você arrasta o controle para um formulário da Web em tempo de design do objeto.
Por padrão, o ReportViewer controle de servidor Web se conecta ao servidor de relatório como o usuário de thread do ASP.NET.
Para se conectar como um usuário diferente (por exemplo, se desejar que todos os usuários a se conectar a um servidor de relatório em uma única conta de usuário), implementar IReportServerCredentials em um objeto serializável e passar uma instância desse objeto para ReportViewer.ServerReport.ReportServerCredentials. Porque o ReportViewer controle pode se conectar ao servidor de relatório depois que a página ASP.NET concluiu o processamento, o objeto deve ser serializado para armazenamento se a sessão do ASP.NET é armazenada fora do processo (por exemplo, em um SQL Server banco de dados).
Observe que há duas desvantagens para definir a propriedade ReportViewer.ServerReport.ReportServerCredentials diretamente:
Sessão do ASP.NET deve ser habilitado.
Sessão do ASP.NET pode se tornar desnecessariamente grande porque o ReportViewer controle coloca uma instância do objeto de sessão para cada usuário que está exibindo a página.
Você pode evitar as desvantagens acima especificando uma implementação de IReportServerConnection2 no arquivo Web. config.
Para obter recomendações sobre como especificar credenciais se o estado de sessão é ativado, desativado, consulte diretrizes para armazenar credenciais se a sessão do ASP.NET é desativado neste tópico.
Especificar uma conexão de servidor de relatório no Web. config
Ao implementar IReportServerConnection ou IReportServerConnection2 você deve especificar sua implementação no arquivo Web. config do aplicativo. O arquivo Web. config fornece o tipo de objeto que contém informações de conexão e credenciais.
Dica
Você deve especificar uma implementação de IReportServerConnection2 ou IReportServerConnectione não IReportServerCredentials no arquivo Web. config.IReportServerConnection2é derivado de IReportServerCredentials e adiciona propriedades adicionais para especificar a URL de um servidor de relatório, valor de tempo limite e personalizadas dos cookies ou cabeçalhos HTTP que você deseja usar.
Embora IReportServerConnection2 é necessária se a sessão do ASP.NET é desativada, você pode usá-la ativada se você quiser evitar armazenar objetos na sessão de sessão do ASP.NET. Para obter mais informações e um exemplo de código, consulte o tópico de referência de programação IReportServerConnection2. Para obter mais informações sobre como adicionar chaves no Web. config, consulte Configurações de Web.config para ReportViewer.
A tabela a seguir resume as interfaces que fornecem informações de conexão e credenciais.
Interface |
Descrição |
---|---|
Você pode usar essa interface para especificar as credenciais que o ServerReport objeto usa para se conectar ao servidor de relatório, se você não quiser se conectar como o usuário atual. Por padrão, o ReportViewer controle se conecta ao servidor de relatório como o usuário de thread do ASP.NET. Você pode especificar um usuário diferente, definindo ReportViewer.ServerReport.ReportServerCredentials para uma instância de sua própria implementação de IReportServerCredentials. |
|
Essa interface herda de IReportServerCredentials e fornece membros adicionais para especificar o servidor de relatório propriedades de URL e o tempo limite. |
|
Essa interface herda de IReportServerConnection e fornece a membros adicionais para especificação de cookies personalizados ou cabeçalhos, que é útil se você estiver usando um produto de logon único com seu servidor de relatório. |
Diretrizes para armazenar credenciais se a sessão do ASP.NET é desativado
Ao implementar IReportServerConnection2, não armazene as credenciais do usuário na classe. Se você armazenar credenciais em um objeto serializável, o nome de usuário e senha serão serializadas para a sessão do ASP.NET e armazenadas em um SQL Server banco de dados ou outro servidor de estado. Embora serializar as credenciais não é necessariamente um risco à segurança, ele aumenta a área da superfície de ataque ao armazenar credenciais como dados de sessão.
Abordagens a seguir são exemplos de como evitar armazenar credenciais junto com outros dados de sessão:
Ler credenciais armazenadas de um arquivo de configuração ou outro repositório de configuração. Para obter mais informações e um exemplo de código, consulte o tópico de referência de programação IReportServerCredentials.
Ler um cookie HTTP da solicitação ASP.NET para fornecer credenciais que variam com base no cliente.
Dica
Embora você tenha flexibilidade para escolher como armazenar credenciais fora da classe, você deve garantir que as mesmas credenciais são retornadas para as solicitações subseqüentes na mesma sessão de relatório.
Consulte também
Referência
Conceitos
Configurações de Web.config para ReportViewer
Configurando o ReportViewer para renderização assíncrona
Considerações de implantação de relatórios de servidor