Auteur de questions
Connexions multiples ADOMD.NET 10.0

Question
-
Bonjour,
Je développe une application .NET (C#) et je rencontre les écarts de comportements entre les versions 9.0 et 10.0 de ADOMD.NET.
En version 10.0, si j'ouvre plusieurs connexions AdomdConnection, et que j'en ferme quelques unes mais pas toutes, l'ouverture d'autres connexions va échouer.
Mais si je ferme toutes les connexions ouvertes ou si je n'en ferme aucune, les ouvertures de connexions suivantes aboutiront avec succès.
Le problème ne se produit pas avec la version 9.0 de ADOMD.NET.
Voici mon programme de test (avec une référence à la DLL Microsoft.AnalysisServices.AdomdClient 10.0):
class Program { static void Main() { string startupPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + "\\"; for (int i = 0; i < 5; i++) { Microsoft.AnalysisServices.AdomdClient.AdomdConnection connection = null; System.IO.FileInfo fileInfo = new System.IO.FileInfo(string.Format("{0}cube{1}.cub", startupPath, i)); try { connection = new Microsoft.AnalysisServices.AdomdClient.AdomdConnection(string.Format("Provider=MSOLAP;Data Source={0}", fileInfo.FullName)); connection.Open(); System.Console.WriteLine("Fichier {0} : connexion réussie", fileInfo.Name); } catch (System.Exception e) { System.Console.WriteLine("Fichier {0} : {1}", fileInfo.Name, e.Message); } finally { if (connection != null && i > 1) connection.Close(); } } System.Console.ReadLine(); } }
En exécutant ce programme, j'obtiens la sortie suivante :
Fichier cube0.cub : connexion réussie Fichier cube1.cub : connexion réussie Fichier cube2.cub : connexion réussie Fichier cube3.cub : Impossible d'établir une connexion. Vérifiez que le serveur fonctionne. Fichier cube4.cub : Impossible d'établir une connexion. Vérifiez que le serveur fonctionne.
Dans ce programme, j'ouvre successivement 5 connexions (de 0 à 4). Les connexions 0 et 1 ne sont pas fermées, mais je ferme la connexion 2. De fait, les connexions 3 et 4 vont échouer.
Mais dans le finally, si je supprime la condition i > 1 (toutes les connexions sont fermées) ou si je supprime le connection.Close() (toutes les connexions restent ouvertes), il n'y a aucun problème :
Fichier cube0.cub : connexion réussie Fichier cube1.cub : connexion réussie Fichier cube2.cub : connexion réussie Fichier cube3.cub : connexion réussie Fichier cube4.cub : connexion réussie
La même expérience avec la version 9.0 de la DLL Microsoft.AnalysisServices.AdomdClient ne génère aucune erreur.
J'espère que mes explications sont claires.
Je souhaite savoir si ce comportement est normal ("nouveauté" de la version 10.0), ou s'il s'agit d'un bug de la version 10.0, ou si j'utilise mal les fonctionnalités d'ADOMD.NET 10.0.
Merci de votre aide.
Nicopika
Toutes les réponses
-
Bonjour,
Je ne suis pas spécialiste en Analysis Services, mais avez vous essayé de fermer la connexion tout en maintenant la session active (faites un Close(false)). Pour plus d'informations : http://technet.microsoft.com/en-us/library/ms123466.aspx
Cordialement
Gilles TOURREAU - MVP C# - MCPD Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5 - MCTS ADO .NET 3.5 / SQL Server 2008 Developper - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr -
Bonjour,
S'il vous plait, pourriez-vous regarder ces liens ?
http://msdn.microsoft.com/fr-fr/library/ms123468.aspx
http://msdn.microsoft.com/fr-fr/library/ms123466.aspx
Il est dit qu'il faut utiliser Dispose() juste après l'appel du Close() de la connexion sinon la connexion reste active pendant un certain temps ( au moins équal à 1 minute ). Comme le nombre maximal de connexions est limité ( suivant les versions entre 5 et 100 ), vous pouvez arriver à ne plus disposer de connexions libres. C'est un petit problème bien connu pour les espaces de noms SMO et qui se rencontre aussi avec ADOMD qui en fait fait indirectement appel à Microsoft.SqlServer.Management.Common et .Smo.
La difference entre la version 9 ( SQl Server 2005 ) et 10 ( SQL Server 2008 ) pour la dll AdomdClient est similaire à celle existant entre les dll SMO 9 et 10 ( et ça s'aggrave avec SQL Server 2008 R2 )
Un conseil : essayez de ne pas vous contenter de trapper Exception mais plutôt de trapper dans l'ordre:
( notamment ExceptionClause )
Exception
Gilles, je connais très peu d'Analysis Service, mais je crois avoir compris que la principale utilisation de Close(False) est de diminuer le temps de reconnexion si l'on a besoin de réutiliser la même connexion dans les 30 ou 60 secondes où la même connexion fermée peut être réutilisée pour une réouverture quasi-immédiate ( à vérifier... )
Bonne journée
Mark Post as helpful if it provides any help.Otherwise,leave it as it is. -
Bonjour,
Merci pour vos réponses.
Gilles : j'ai essayé de garder la session active mais sans succès.
Papy : l'ajout du Dispose() n'a pas résolu le problème non plus.
En poursuivant les tests, j'ai constaté que le problème se produisait lorsque les fichiers .cub n'existaient pas. S'ils n'existent pas, ADOMD.NET est censé créer les fichiers avant de se connecter. Cela fonctionne sauf si on ferme une autre connexion entre temps. Par contre, si les fichiers existent déjà, ADOMD.NET se connecte sans problème, même si une autre connexion a été fermée.
Cordialement
-
Bonjour,
Nicopika, j’ai escaladé votre problème aux autres modérateurs MSDN et j’attends des réponses. Pour le moment, aucun bug n’est pas enregistré concernant ce scenario. Vous pouvez aussi ouvrir un billet sur Microsoft Connect pour voir s’ils peuvent vous donner plusieurs informations sur ce sujet.
Cordialement,
Alex
________________
Astuces pour Visual Studio 2010
XNA – Développement jeux vidéo
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
- Proposé comme réponse Papy Normand mardi 9 novembre 2010 10:00
-
-
Bonjour,
Pour le moment je n’ai aucune information de la part de l’équipe. Si vous recevrez des informations sur Microsoft Connect avant moi, je vous remercie de les partager ici.
Cordialement,
Alex
________________
Astuces pour Visual Studio 2010
XNA – Développement jeux vidéo
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.