Erreur intermittente sur le service Windows: le fournisseur sous-jacent a échoué en mode ouvert

J'ai un service Windows s'exécutant dans le context d'un count de service de domaine qui communique avec une database SQL Server en utilisant. Il s'exécute toutes les 10 minutes et communique avec la database à chaque fois.

J'ai eu plusieurs occasions où il fonctionnerait pendant un certain nombre de jours puis j'ai trouvé le service arrêté parce que l'exception a été levée.

En regardant les journaux, je trouve:

Message: Le fournisseur sous-jacent a échoué sur Open.

Stack Trace: à System.Data.Entity.Core.EntityClient.EntityConnection.Open () …

avec une exception interne de:

Message: Une erreur liée au réseau ou à une instance s'est produite lors de l'établissement d'une connection à SQL Server. Le server est introuvable ou inaccessible. Vérifiez que le nom d'instance est correct et que SQL Server est configuré pour autoriser les connections distantes. (fournisseur: SQL Network Interfaces, erreur: 26 – Erreur de localization du server / de l'instance spécifiée)

Stack Trace: à System.Data.SqlClient.SqlInternalConnection.OnError (Exception SqlException, Boolean breakConnection, Action`1 wrapCloseInAction) …

J'ai vérifié avec l'administrateur de database qui gère le SQL Server et le server était opérationnel lorsque les erreurs se sont produites et rien de pertinent n'était dans les journaux pour indiquer les time d'arrêt ou la perte de connection réseau.

Le service Windows est construit avec .NET 4.5 en utilisant Entity Framework 6. Il utilise la string de connection suivante:

<add name="AmceContext" connectionSsortingng="data source=ServerName\InstanceName;initial catalog=DbName;integrated security=SSPI;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 

Je pourrais juste placer le service de Windows pour redémarrer automatiquement s'il arrête. Mais je voudrais find le problème sous-jacent. J'ai également pensé à Connection Resiliency mais cela pourrait poser des problèmes car cette erreur pourrait également survenir lors de l'installation du service, si le nom du server n'était pas correct. En d'autres termes, il pourrait continuer à réessayer un mauvais nom de connection.

J'ai installé DebugDiag et ai exécuté une parsing contre le file de vidage, il m'a donné la recommandation suivante:

Veuillez contacter le fournisseur Microsoft Corporation pour la résolution du problème concernant le file suivant: C: \ Windows \ assembly \ NativeImages_v4.0.30319_64 \ mscorlib \ ce681fb89786c8f11e99ae5f8e9588ab \ mscorlib.ni.dll.

Très probablement, c'est un problème de réseau. Ma meilleure suggestion est de travailler avec les gens du réseau de votre organisation et de déterminer s'il y a des problèmes sous-jacents de networking intermittent.

Une solution de contournement qui peut ou peut ne pas fonctionner dans votre cas consiste à essayer de se connecter directement à l'adresse IP et au port du server de database.

Pour plus d'informations sur la résolution de ce problème, consultez le blog MSDN suivant: http://blogs.msdn.com/b/sql_protocols/archive/2007/05/13/sql-network-interfaces-error-26-error- locating-server-instance-specified.aspx