none
Entity Framework 4 RRS feed

  • Discussion générale

  • Je veux, au travers d'un service WCF exposé sur un serveur Web (Win 2005), connecter une base de données située sur un serveur distant. La connexion est initialisée au niveau de la création du datacontext. J' ai créé un programme console qui utilise EF et je l'ai installé sur le serveur web. A l'exécution, j obtiens l'erreur suivante : "Breakconnection". Y-a-t-il un moyen pour contourner ce problème ?
    • Type modifié Aurel Bera vendredi 26 avril 2013 06:29 Discussion
    • Type modifié Aurel Bera vendredi 26 avril 2013 06:29 Discussion
    vendredi 19 avril 2013 13:07

Toutes les réponses

  • Bonjour,

    Le mieux serait de poster le message complet. Si "Breakconnection" est un message qu'affiche l'application console en cas de problème, le mieux serait d'afficher l'exception elle-même.

    Mon premier mouvement serait de dire que ce server web n'a pas accès à la base de données (elle est "distante" par rapport au serveur web ?). Vérifier par exemple qu'un parefeu ne bloquerait pas les échanges entre ce serveur web et la base...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    vendredi 19 avril 2013 13:16
    Modérateur
  • Bonjour Patrice

    Oui elle est distante par rapport au serveur Web.

    j'ai vérifié la connection par un fichier udl, elle est active. Le  modèle edmx a été créé sur un troisième PC. Le fichier App.config contenant la chaîne de connexion d'origine pose-t-il un problème ?

    Ci-dessous la trace des erreurs générées à l'exécution du programme console depuis mon PC de developpement

    Échec du fournisseur sous-jacent sur Open.
    System.Data.SqlClient.SqlException (0x80131904): Une erreur liée au réseau ou spécifique à l'instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou n'est pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions distantes. (provider: Named Pipes Provider, error: 40 - Impossible d'ouvrir une connexion à SQL Server)
       à System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
       à System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
       à System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity)
       à System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, SqlConnection owningObject)
       à System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout)
       à System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, TimeoutTimer timeout, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
       à System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
       à System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
       à System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
       à System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
       à System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
       à System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
       à System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       à System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       à System.Data.SqlClient.SqlConnection.Open()
       à System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)

    D'avance merci.


    vendredi 19 avril 2013 13:33
  • Bonjour,

    Ce message indique que le serveur SQL n'est pas accessible.
    Avez-vous vérifié la chaîne de connexion ? Pouvez-vous vous connectez depuis SQL Server Management Studio ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    dimanche 21 avril 2013 22:07
    Modérateur
  • Bonjour Gilles,

    Merci pour votre réponse.

    Oui je peux me connecter depuis SQL Management Studio situé sur le serveur Web. Cependant la base que je veux connecter est sur un serveur avec ISA Serveur. Y-a-t-il quelque chose à faire de ce côté là ?

    Cordialement,

    Michel Marmié

    lundi 22 avril 2013 08:34
  • Bonjour,

    Normalement non...
    Si vous arrivez à vous connecter à la base de données depuis SQL Management Studio situé sur votre serveur web, votre application peut sans aucun problème se connecter à votre base de données.

    Avez-vous vérifié que le nom du serveur spécifié est correct dans le fichier de configuration ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 22 avril 2013 22:47
    Modérateur
  • Oui bien sûr, je ne vous aurais pas sollicité sans avoir vérifier la chaîne de connexion. Je l'ai testée dans un fichier de liaison (.udl) et elle est opérationnelle. Voulez-vous que je vous la communique ainsi que le nom  d'une table pour que vous puissiez faire des essais ?

    Cordialement

    Michel Marmié

    mardi 23 avril 2013 18:47
  • Bonjour,

    Quelle type d'authentification utilisez vous ?
    Pouvez vous nous montrer votre chaîne de connexion (en supprimant les informations sensibles...) ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    mardi 23 avril 2013 22:13
    Modérateur
  • Bonjour,

    Voici le code qui crée la connexion à la source de donnée :

           

    privatestaticEntityConnectionCreeEntityConnection()

            {

               

    stringproviderName = "System.Data.SqlClient";

               

    stringserverName = "xxx.xxx.xx.xxx";

               

    stringdatabaseName = "BDYYY";

               

    SqlConnectionStringBuildersqlBuilder =

                   

    newSqlConnectionStringBuilder();

                sqlBuilder.DataSource = serverName;

                sqlBuilder.InitialCatalog = databaseName;

                sqlBuilder.PersistSecurityInfo =

    true;

                sqlBuilder.ConnectTimeout = 10;

                sqlBuilder.UserID =

    "UserID";

                sqlBuilder.Password =

    "MDP";

                sqlBuilder.MultipleActiveResultSets =

    true;

                sqlBuilder.ApplicationName =

    "EntityFramework";

               

    stringproviderString = sqlBuilder.ToString();

               

    EntityConnectionStringBuilderentityBuilder = newEntityConnectionStringBuilder();

     

                entityBuilder.ProviderConnectionString = providerString;

                entityBuilder.Provider = providerName;

               

    // Set the Metadata location. metadata=res://*/ModeleACS.csdl|res://*/ModeleACS.ssdl|res://*/ModeleACS.msl


                entityBuilder.Metadata =

    @"res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl";

               

    //Console.WriteLine(entityBuilder.ToString());


               

    EntityConnectionconn = newEntityConnection(entityBuilder.ToString());

               

    returnconn;

            }


    mercredi 24 avril 2013 07:32
  • Bonjour

    Oui je peux me connecter depuis SQL Management Studio situé sur le serveur Web

    Ce qui nous intéresse c'est si vous pouvez vous connecter depuis SQL Management Studio située sur le PC de développement. S'il y a un antivirus/pare-feu sur le serveur qui bloque toute connexion sur le serveur, comment vous pouvez vérifier ça?

    Regardez ici les configurations nécessaires pour rendre SQL Serveur accessible sur le réseau :

    http://support.microsoft.com/kb/914277

    Cordialement,


    Aurel BERA, Microsoft
    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.


    • Modifié Aurel Bera mercredi 24 avril 2013 10:47
    mercredi 24 avril 2013 10:35
  • Bonjour,

    Nous changeons le type de votre question à « Discussion générale ». Si vous avez plus de temps pour réexaminer la question et fournir plus d'informations, n'hésitez pas à modifier le type du thread à « Question ». Si le problème est résolu, s’il vous plaît partagez la solution avec nous afin que la réponse puisse être trouvée et utilisée par d'autres membres de la communauté ayant des questions similaires.

    Merci !

    Cordialement,


    Aurel BERA, Microsoft
    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.

    vendredi 26 avril 2013 06:30
  • Bonjour,

    Nous avons procédé aux vérifications de vos dernières suggestions et la question n'est pas résolue.

    La règle de routage sur le routeur (1433 vers 1434) est correcte, ainsi que celle d'ISA.

    L'observateur de connexion d'ISA laisse passer la connexion à SQL sans problème.

    Tout se passe comme si SQL SERVER n'acceptait pas la connexion distante, via Entity FrameWork.

    J'ai trouvé la solution à mon problème. Je vous explique :

    Quand j'ai créé la première fois le modèle EF, j'étais en local de la base de données que je voulais connecter depuis le service WCF hébergé sur un serveur Web externalisé. Dans ce cas, après avoir déployé mon service, le Modèle ne se connectait pas à la base SQL d'où ma demande sur ce forum.

    Après quelques lectures dans MSDN, j'ai eu l'idée de placer mon ordinateur de développement hors du réseau de l'entreprise qui héberge la base SQL et de recréer mon modèle dans cette configuration. El là, mon service WCF a fonctionné du premier coup.

    Résolu.
    samedi 4 mai 2013 08:49
  • Je crois que c'étais un soucis dans le fichier de configuration. A la génération de EF app.Config se rempli à travers tes paramètres de connexion à ta base de donnée local.

    Cordialement

    mercredi 5 juin 2013 18:32