mercredi 18 février 2009

[Sharepoint]Erreur lors de l'intégration d'une application Asp.net contenant un ReportViewer

Tout d'abord, le pitch :

J'ai en test, un site de publication Sharepoint qui intégre une application Asp.net contenant des ReportViewer.

L'intégration de l'application Asp.net est très simple, il s'agit d'un répertoire virtuel sous le Site web IIS de mon site Sharepoint (avec son propre Pool Applicatif)

Le site ayant besoin d'Ajax, de web services, de reportViewer,..., tout est ajouté dans le web.config du site Sharepoint (httpHandlers, HttpModule, CAS modifié,..).

Tant que je fais du HTTP, pas de souci, tout fonctionne et l'intégration est parfaite ( allez on y croit :p)

Mais Voilà, le site doit être appelé en HTTPS/SSL.

Mise en place du SSL

Le Https est géré par le reverse proxy, qui fait son boulot et publie mon site.

Donc, je configure les adresses de substitutions dans la centrale d'admin.

Et ça fonctionne

L'application Asp.net fonctionne très bien, comme avant

Sauf  lorsque les pages aspx contiennent un ReportViewer, dans ce cas l'application Asp.net me renvoi :


Code de l'événement : 3005
Message d'événement : Une exception non gérée s'est produite.
Heure de l'événement : 18/02/2009 16:21:46
Heure de l'événement (UTC) : 18/02/2009 15:21:46
ID d'événement : e95e6ec874e54379ac3e2f42b0d86dea
Séquence d'événements : 55
Occurrence de l'événement : 3
Code de détail de l'événement : 0

 

Informations d'application : ... Informations sur l'exception : Type d'exception : NullReferenceException Message d'exception : La référence d'objet n'est pas définie à une instance d'un objet. Informations sur la demande : URL de la demande : ma page aspx Chemin d'accès à la demande : ma page aspx Adresse d'hôte de l'utilisateur : x.x.x.x ... Trace de la pile : à Microsoft.Office.Server.Administration.SqlSessionStateResolver.System.Web.IPartitionResolver.ResolvePartition(Object key) à System.Web.PartitionManager.GetPartition(IPartitionResolver partitionResolver, String id) à System.Web.SessionState.SqlSessionStateStore.GetConnection(String id, Boolean& usePooling) à System.Web.SessionState.SqlSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, ObjectlockId, Boolean newItem) à System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) à System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() à System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Après de longues recherches, voilà la solution qui m'a débloqué:

Solution (ou pas)

Ne voulant toucher à rien dans le web.config du site Sharepoint, car celui-ci fonctionne, les modifications se trouvent dans le web.config de mon application.

Voilà juste ce que j'ai rajouter dans le noeud system.web:

[sourcecode language="xml"]

     stateConnectionString="tcpip=nomserveurBDD:Port" sqlConnectionString="data source=nomserveurBDD;Trusted_Connection=yes"
     cookieless="false"
     />

[/sourcecode]

Le plus important est de mettre partitionResolverType=""  ainsi, il ne reprend pas le Resolver du site parent (Sharepoint)
ensuite, je lui ai défini manuellement la chaine de connexion.

Je ne suis pas sûr que ça soit la meilleure solution, mais au bout d'une après midi de test, c'est la seule qui a bien voulue fonctionner.

 

 

 

 

Aucun commentaire:

Enregistrer un commentaire