2013-10-16 3 views
1

Je travaille sur ce sujet depuis un certain temps et je ne sais plus quoi faire .. donc voici le problème.Windows Azure Web Service, ne parvient pas à se connecter à la base de données SQL

J'ai un service Web Azure, qui fonctionne parfaitement localement. Il doit se connecter à une Azure base de données SQL (j'utilise la même ConnectionString pour le débogage et d'azur .. donc il doit être à droite)

En utilisant IntelliTrace, je trouve ces erreurs:

Requested registry access is not allowed. 
System.IO.FileNotFoundException Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=Neutral.... 
System.Data.Entity.Core.ProviderIncompatibleException 
System.Data.SqlClient.SqlException A network-related or instance-specific error occured while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct... (This about 50 times) 
System.Threading.WaitHandleCannotBeOpenedException    No handle of the given name exists. 
System.Security.SecurityException   Requested registry access is not allowed 
Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironmentException  error 
System.Threading.WaitHandleCannotBeOpenedException   No handle of the given name exists. 

(pile d'exception, haut le plus récent, le plus ancien Bott)

Dans mon web.config je configurer EF et ConnectionString comme ceci:

<configSections> 
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
<section name="EntityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework" requirePermission="false"/> 
</configSections> 
<connectionStrings> 
    <add name="DefaultConnection" connectionString="Server=SERVER.database.windows.net;Database=LeagueMetaDatabase;User [email protected];Password=PW;Trusted_Connection=False;Encrypt=True;" providerName="System.Data.SqlClient"/> 
</connectionStrings> 

I également désactivé "version spécifique" pour l'assemblage EF et Acti "Copie locale". J'ai vérifié dans le dossier bin du service sur le serveur, la DLL est là.

Le service utilise beaucoup de async, mais comme déjà dit cela fonctionne localy .. J'ai également installé .NET sur le serveur 4.5.1 juste pour être sûr que le problème n'est pas

// Modifier Première de tout, merci pour toute l'aide jusqu'à présent!

J'ai essayé de réduire le problème .. reconstruire le projet de trou et essayer de trouver ce qui ne fonctionne pas. Il semble que les tâches asynchrones ne peuvent pas lire ConnectionString dans Web.config sur Azure Server Cloud. Dans l'émulateur, cela fonctionne. J'ai codé en dur le ConnectionString dans le Contexte et il fonctionne de cette façon. Quelqu'un peut me dire ce qui crée ce comportement et comment je peux le remettre dans le Web.config?

+0

comment allez-vous déployer vers Azure? Si vous utilisez la méthode "publish" depuis VS, vous pouvez vérifier si les chaînes de connexion sont correctement configurées. Je me souviens que Visual Studio a remplacé les chaînes de connexion du développement à la production, vous pouvez vérifier cela. Aussi, je ne recommande pas d'utiliser tout ce qui n'est pas stable sur Azure - j'ai aussi eu beaucoup de problèmes avec ça (et je vois que vous utilisez EF 6). – VsMaX

+0

Que contient la balise dans web.config? Quel FE fait-il référence? – sunil

+0

Je n'ai pas de balise d'exécution dans mon web.config du service –

Répondre

0

Tout d'abord, merci pour toute l'aide jusqu'à présent!

J'ai essayé de réduire le problème .. reconstruire le projet de trou et essayer de trouver ce qui ne fonctionne pas. Il semble que les tâches asynchrones ne puissent pas lire ConnectionString dans Web.config sur Azure Server Cloud. Dans l'émulateur, cela fonctionne. J'ai codé en dur le ConnectionString dans le Contexte et il fonctionne de cette façon. Quelqu'un peut me dire ce qui crée ce comportement et comment je peux le remettre dans le Web.config?

0

Le service de cloud DB & est-il dans le même centre de données? Si ce n'est pas le cas, liez vos ressources via le panneau de contrôle Azure et/ou assurez-vous que vous avez activé "autoriser les services azure à se connecter" dans la section de configuration DB. Assurez-vous que votre connexion SERVER spécifie "tcp" - Le service de base de données SQL de Windows Azure est uniquement disponible avec le port TCP 1433. Pour accéder à une base de données SQL depuis votre ordinateur, vérifiez que votre pare-feu autorise la communication TCP sortante. port 1433 (à partir de Guidelines for Connecting to Windows Azure SQL Database). Si vous prenez la chaîne de connexion ADO à partir de la page du tableau de bord DB, vous devriez voir:

Server=tcp:{your_servername}.database.windows.net,1433;Database={your_database_name};User ID={your_userid};Password={your_password_here};Trusted_Connection=False;Encrypt=True;Connection Timeout=30; 
+0

Oui, ils sont dans le même Centre! Lier em effectivement seulement des liens em au tableau de bord .. il ne change rien d'autre! –

+0

mis à jour avec le lien de dépannage et de clarification tcp – viperguynaz

+0

@AlexejHaak Je pensais que "cela ne change rien d'autre!" aussi bien - mais moi, comme vous, j'avais tort. Si vous allez dans l'onglet de configuration de votre service Web, vous verrez les informations de connexion pour votre base de données et votre serveur (je n'ai qu'un service mobile pour l'instant - mais j'ai exactement le problème que vous décrivez). J'ai trouvé que ces valeurs avaient besoin d'être définies correctement (en liant la ressource) pour que mes connexions à la base de données fonctionnent correctement. Cela m'a surpris aussi. Ces valeurs semblent être transformées automatiquement dans votre fichier de configuration ... – dav1dsm1th

2

Comment votre solution est-elle déployée sur Azure? Utilisez-vous un service cloud ou un site Web? Si vous exécutez un site Web Azure, le problème peut être lié au fait que le nom de la chaîne de connexion est le même dans le fichier web.config et dans votre site Web Azure. Si tel est le cas, vous pouvez essayer de renommer la chaîne de connexion définie dans Azure Management Portal pour votre site Web.Cela peut être effectué via la page de gestion Configurer.

Espérons que cela aide.

Questions connexes