2012-05-02 3 views
10

Я использую ASP.Net MVC 3 (Entity Framework) с сервером Sql 2008. Строка подключения в Интернете .config. Но иногда я получаю следующее исключение из моего приложения:При установлении соединения с SQL Server возникла связанная с сетью или специфичная для экземпляра ошибка - ASP.NET MVC Entity Framework

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) 

Generated: Wed, 02 May 2012 05:05:21 GMT 

System.Data.EntityException: The underlying provider failed on Open. ---> System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) 
    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 
    at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity) 
    at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, SqlConnection owningObject) 
    at System.Data.SqlClient.SqlInternalConnectionTds.LoginWithFailover(Boolean useFailoverHost, ServerInfo primaryServerInfo, String failoverHost, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout) 
    at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, TimeoutTimer timeout, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) 
    at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) 
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) 
    at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) 
    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
    at System.Data.SqlClient.SqlConnection.Open() 
    at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure) 
    --- End of inner exception stack trace --- 
    at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure) 
    at System.Data.EntityClient.EntityConnection.Open() 
    at System.Data.Objects.ObjectContext.EnsureConnection() 
    at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) 
    at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() 
    at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source) 
    at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__2[TResult](IEnumerable`1 sequence) 
    at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot) 
    at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression) 
    at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source) 
    at MyApp.Data.UserRepository.GetUserDetails(String username) 
    at MyApp.Core.Services.SiteService.GetUserDetails(String username, Int64 userId) 
    at MyApp.PublicSite.Web.Controllers.BaseController.Initialize(RequestContext requestContext) 
    at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) 
    at MyApp.PublicSite.Web.Controllers.BaseController.Execute(RequestContext requestContext) 
    at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d() 
    at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) 
    at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) 
    at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) 
    at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

Строка подключения:

<connectionStrings> 
    <add name="MyAppDBContainer" connectionString="metadata=res://*/MyAppDB.csdl|res://*/MyAppDB.ssdl|res://*/MyAppDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SERVERNAME;initial catalog=MyAppDB;persist security info=True;user id=USERID;Password=PASSWORD;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

Это исключение происходит случайным образом и не в состоянии получить/воспроизвести его каждый раз. Любые возможные настройки могут отсутствовать здесь? Пожалуйста, предложите.

+0

При возникновении этой ошибки, Является ли ваш компьютер в сети или нет? Я думаю, вы должны сначала проверить свою локальную сеть или интернет-соединение. –

+0

В Local его не происходит, я получаю это исключение только с развернутого сервера. – Prasad

+0

@Prasad проверить строку подключения, которую я предоставил .... –

ответ

2

Учитывая тот факт, что иногда/в основном работают (как вы говорите):

  • Строка соединения OK
  • SQL настроен право (т.е. позволяет удаленные соединения и т.д.)

Единственная причина, по которой это может быть, это падение сети между вашим сервером (вашим кодом) и SQL Server или отказ SQL Server от какой-либо причины.

+0

Когда я получаю доступ к той же странице, откуда я получил это исключение, она работает, поэтому выключение сервера может не быть причиной. А также веб-сайт и сервер sql находятся на одном сервере, поэтому я не уверен, может ли сеть быть причиной. – Prasad

+0

[Googling] (https://www.google.com/search?sourceid=chrome&ie=UTF-8&q=A+network-related+or+instance-specific+error+occurred+while+establishing+a+connection+to + SQL + Server) эта ошибка дает множество возможных решений. Вы их преодолели? Кроме того, пожалуйста, запустите 'ping -t localhost' (или ваше машинное имя SQL), оставьте его на некоторое время и посмотрите, время от времени теряете пакеты. –

+0

Я пробовал эту опцию из Google, все параметры, приведенные там, настроены правильно, но все еще получают это исключение :(Также я проверил ping, и я ответил без каких-либо сбоев. – Prasad

0

Попробуйте это ....

<add name="MyAppDBContainer" connectionString="metadata=res://*;provider=System.Data.SqlClient;provider connection string='data source=SERVERNAME;initial catalog=MyAppDB;persist security info=True;user id=USERID;Password=PASSWORD;multipleactiveresultsets=True;'" providerName="System.Data.EntityClient" /> 

Я отредактировал мой ответ .....

+0

Приведено сообщение об ошибке: System.ArgumentException: в строке подключения отсутствует какая-либо необходимая информация. Всегда требуется ключевое слово «поставщик». – Prasad

+0

naim, я изменил строку подключения на ту, которую вы обновили, и она все еще выдает ошибку подключения иногда – Prasad

+0

иногда !, так что это работает некоторое время и некоторое время ... –

0

У нас есть чтобы проверить следующее:

1.Проверьте настройки Tcp/IP в настройках менеджера конфигурации sqlserver. Если он отключен, make sure we have to enable the status for TCP/IP

2.Add port to fire wall exception at fire settings. Детали для SQL порт:

Имя: SQL

Номер порта: 1433

Протокол: Выберите TCP

Смежные вопросы

 Смежные вопросы