Spécification des connexions et des informations d'identification du contrôle serveur Web ReportViewer
Pour spécifier une connexion du contrôle ReportViewer au serveur de rapports, il est judicieux de connaître les conditions dans lesquelles les connexions seront établies.
Au démarrage, lors du chargement de la page Web qui contient le contrôle ReportViewer, ce dernier se connecte au serveur de rapports pour établir la session de rapport, obtenir ou définir les propriétés des paramètres de rapport et récupérer la liste des extensions de rendu disponibles sur le serveur.
Si le contrôle s'exécute avec AsyncRendering=true, le contenu HTML du rapport est extrait de manière asynchrone par un objet IFrame lors du rendu de la page.
Si le rapport fait référence à une image externe, le contrôle ReportViewer extrait les images par le biais de demandes distinctes à l'aide du gestionnaire HTTP ReportViewer, dans lequel chaque demande est effectuée sous sa propre connexion.
Un fois le rapport rendu, des connexions supplémentaires peuvent s'établir si vous exportez un rapport rendu dans un format différent. Une demande d'exportation est transmise du navigateur au serveur de rapports à l'aide d'une connexion distincte.
La réussite de toutes ces opérations dépend de la validité des informations de connexion au serveur de rapports dont dispose le contrôle ReportViewer. La manière dont vous spécifiez les informations de connexion dépend de différents facteurs, par exemple si vous utilisez l'authentification par formulaire, l'authentification Windows, les informations d'identification de l'utilisateur actuel ou la session ASP.NET.
Comment spécifier des connexions
Pour vous connecter au serveur, vous pouvez définir des propriétés sur l'objet ServerReport ou implémenter des interfaces qui définissent la connexion, puis spécifier l'implémentation dans le fichier Web.config. Le contrôle ReportViewer lit toujours le fichier Web.config en premier et utilise les valeurs de connexion si elles sont spécifiées.
Si l'état de session est activé, vous avez le choix entre définir des propriétés sur l'objet ServerReport ou spécifier des informations de connexion dans le fichier Web.config. Si vous spécifiez des informations de connexion dans le fichier Web.config, ne définissez pas de propriétés sur l'objet ServerReport.
Si l'état de session est désactivé, vous devez implémenter IReportServerConnection ou IReportServerConnection2 et spécifier l'implémentation dans le fichier Web.config.
Notes
Le compte d'utilisateur sous lequel la connexion est établie doit posséder une attribution de rôle valide sur le serveur de rapports.Des attributions de rôle au niveau système et élément sont utilisées pour créer un jeu complet d'autorisations.Si vous n'êtes pas familiarisé avec les attributions de rôle de serveur de rapports, vous pouvez suivre un didacticiel pour apprendre les notions de base sur l'attribution de rôles.Pour plus d'informations, consultez Didacticiel : définition des autorisations dans Reporting Services sur MSDN.
Définition de propriétés sur l'objet ServerReport
Vous pouvez définir les propriétés d'URL et de délai d'attente du serveur de rapports sur l'objet ServerReport lorsque vous faites glisser le contrôle sur un formulaire Web au moment de la conception.
Par défaut, le contrôle serveur Web ReportViewer se connecte au serveur de rapports en tant qu'utilisateur de thread ASP.NET.
Pour vous connecter en tant qu'autre utilisateur (par exemple, si vous souhaitez que tous les utilisateurs se connectent à un serveur de rapports sous un seul compte d'utilisateur), implémentez IReportServerCredentials sur un objet sérialisable et passez une instance de cet objet à ReportViewer.ServerReport.ReportServerCredentials. Comme le contrôle ReportViewer peut se connecter au serveur de rapports une fois le traitement de la page ASP.NET terminé, l'objet doit être sérialisable pour le stockage si la session ASP.NET est stockée hors processus (par exemple, dans une base de données SQL Server).
Notez que définir directement la propriété ReportViewer.ServerReport.ReportServerCredentials présente deux inconvénients :
La session ASP.NET doit être activée.
La session ASP.NET peut devenir inutilement volumineuse car le contrôle ReportViewer place une instance de l'objet dans la session pour chaque utilisateur qui affiche la page.
Vous pouvez éviter les inconvénients ci-dessus en spécifiant une implémentation de l'objet IReportServerConnection2 dans le fichier Web.config.
Pour obtenir des recommandations sur la manière de spécifier des informations d'identification si l'état de session est désactivé, consultez la section Instructions pour stocker des informations d'identification si la session ASP.NET est désactivée dans cette rubrique.
Spécification d'une connexion au serveur de rapports dans Web.config
Lors de l'implémentation de l'objet IReportServerConnection ou IReportServerConnection2 vous devez spécifier votre implémentation dans le fichier Web.config de l'application. Le fichier Web.config fournit le type d'objet qui contient les informations de connexion et d'identification.
Notes
Vous devez spécifier une implémentation de IReportServerConnection2 ou de IReportServerConnection, et non pas de IReportServerCredentials dans le fichier Web.config.IReportServerConnection2 est dérivé de IReportServerCredentials et ajoute des propriétés supplémentaires pour spécifier l'URL d'un serveur de rapports, la valeur du délai d'attente et tous les cookies ou en-têtes personnalisés HTTP que vous souhaitez utiliser.
Bien que l'objet IReportServerConnection2 soit requis si la session ASP.NET est désactivée, vous pouvez l'utiliser avec la session ASP.NET activée si vous souhaitez éviter de stocker des objets dans la session. Pour obtenir plus d'informations et un exemple de code, consultez la rubrique sur les références de programmation pour IReportServerConnection2. Pour plus d'informations sur la façon d'ajouter des clés dans Web.config, consultez Paramètres Web.config pour ReportViewer.
Le tableau suivant récapitule les interfaces qui fournissent des informations d'identification et de connexion.
Interface |
Description |
---|---|
Vous pouvez utiliser cette interface pour spécifier les informations d'identification que l'objet ServerReport utilise pour se connecter au serveur de rapports si vous ne souhaitez pas vous connecter en tant qu'utilisateur actuel. Par défaut, le contrôle ReportViewer se connecte au serveur de rapports en tant qu'utilisateur de thread ASP.NET. Vous pouvez spécifier un autre utilisateur en définissant ReportViewer.ServerReport.ReportServerCredentials dans une instance de votre propre implémentation de l'objet IReportServerCredentials. |
|
Cette interface hérite de l'objet IReportServerCredentials et fournit des membres supplémentaires pour spécifier les propriétés d'URL et de délai d'attente du serveur de rapports. |
|
Cette interface hérite de l'objet IReportServerConnection et fournit des membres supplémentaires pour spécifier les cookies et en-têtes personnalisés, ce qui est pratique si vous utilisez un produit d'authentification unique avec le serveur de rapports. |
Instructions pour stocker des informations d'identification si la session ASP.NET est désactivée
Lors de l'implémentation de l'objet IReportServerConnection2, ne stockez pas les informations d'identification de l'utilisateur dans la classe. Si vous stockez des informations d'identification dans un objet sérialisable, le nom d'utilisateur et le mot de passe sont sérialisés dans la session ASP.NET et stockés dans une base de données SQL Server ou sur un autre serveur d'état. Si la sérialisation des informations d'identification ne constitue par forcément un risque pour la sécurité, elle augmente toutefois la surface d'exposition en stockant des informations d'identification en tant que données de session.
Les exemples suivants montrent comment éviter de stocker des informations d'identification avec d'autres données de session :
Lisez les informations d'identification stockées à partir d'un fichier de configuration ou d'un autre magasin de configuration. Pour obtenir plus d'informations et un exemple de code, consultez la rubrique sur les références de programmation pour IReportServerCredentials.
Lisez un cookie HTTP à partir de la demande ASP.NET pour fournir des informations d'identification qui varient selon le client.
Notes
Bien que vous ayez le choix du mode de stockage des informations d'identification à l'extérieur de la classe, vous devez veiller à ce que les mêmes informations d'identification soient retournées pour les demandes suivantes dans la même session de rapport.
Voir aussi
Référence
Concepts
Paramètres Web.config pour ReportViewer
Configuration de ReportViewer pour un rendu asynchrone
Aspects de déploiement pour les rapports de serveur