实体框架随机访问数据库失败

时间:2018-11-05 09:33:41

标签: c# sql-server entity-framework wcf iis

我正在使用Entity Framework处理我的数据库。 我创建了一个WCF服务,安装在IIS上。

此服务收到许多请求,并且每次必须更新数据库中的某些记录。有时,似乎随机出现数据访问失败,并显示以下消息:

  

System.Data.Entity.Core.EntityException:基础提供程序   打开失败。 ---> System.Data.SqlClient.SqlException:是   特定错误的验证   稳定连接SQL Server的功能。非Il服务器   不可访问的状态。 Verificare che il nome dell'istanza   SQL Server sia configurato(以协议形式)   connessioni远程。 (提供者:SQL网络接口,错误:26-   服务器错误/ dell'istanza规范错误

堆栈跟踪为

  

在   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity   身份,SqlConnectionString connectionOptions,SqlCredential   凭证,对象providerInfo,字符串newPassword,SecureString   newSecurePassword,布尔型redirectedUserInstance,SqlConnectionString   userConnectionOptions,SessionData reconnectSessionData,   DbConnectionPool池,字符串accessToken,布尔值   applyTransientFaultHandling,SqlAuthenticationProviderManager   sqlAuthProviderManager)

     

在   System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool   池,DbConnection owningObject,DbConnectionOptions选项,   DbConnectionPoolKey poolKey,DbConnectionOptions userOptions)

     

在   System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection   owningObject,DbConnectionOptions,userOptions,DbConnectionInternal   oldConnection)

     

在   System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection   owningObject,DbConnectionOptions,userOptions,DbConnectionInternal   oldConnection)

     

在   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection   owningObject,UInt32 waitForMultipleObjectsTimeout,布尔值   allowCreate,仅布尔值OneCheckConnection,DbConnectionOptions   userOptions,DbConnectionInternal&连接)

     

在   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection   owningObject,TaskCompletionSource`1重试,DbConnectionOptions   userOptions,DbConnectionInternal&连接)

     

在   System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection   owningConnection,TaskCompletionSource`1重试,DbConnectionOptions   userOptions,DbConnectionInternal oldConnection,DbConnectionInternal&   连接)

     

在   System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection   externalConnection,DbConnectionFactory connectionFactory,   TaskCompletionSource`1重试,DbConnectionOptions userOptions)

     

在   System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1   重试)

     

在   System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1   重试)

     

在System.Data.SqlClient.SqlConnection.Open()

     

在   System.Data.Entity.Infrastructure.Interception.InternalDispatcher 1.Dispatch[TTarget,TInterceptionContext](TTarget target, Action 2操作,TInterceptionContext拦截上下文,   操作3 executing, Action 3已执行)

     

在   System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection   连接,DbInterceptionContext拦截上下文)

     

在   System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy。<> c__DisplayClass1.b__0()

     

在   System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute [TResult](Func`1   操作)

     

在System.Data.Entity.Core.EntityClient.EntityConnection.Open()

中      

---精美的della traccia dello stack国际戴尔---

     

在System.Data.Entity.Core.EntityClient.EntityConnection.Open()

中      

在   System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(布尔   shouldMonitorTransactions)

     

在   System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction [T](Func`1   func,IDbExecutionStrategy执行策略,布尔   startLocalTransaction,布尔型releaseConnectionOnSuccess)

     

在   System.Data.Entity.Core.Objects.ObjectQuery`1。<> c__DisplayClass7.b__5()

     

在   System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute [TResult](Func`1   操作)

     

在   System.Data.Entity.Core.Objects.ObjectQuery 1.GetResults(Nullable 1   forMergeOption)

     

在   System.Data.Entity.Core.Objects.ObjectQuery`1..GetEnumerator> b__0()

     

在System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()

中      System.Linq.Enumerable.FirstOrDefault [TSource](IEnumerable`1中的

  来源)

     

在Myservice.UpdateState中(字符串ID,字符串codiceStato,字符串   info:C:\ MyService.svc.cs:riga 52中的布尔inviaEmail,字符串dal)

写在堆栈跟踪中的代码行52是:

using (var db = new Entities())
{
    var f = db.Table.FirstOrDefault(x => x.ID == ID);  //this line throws the error
    ...

由于连接字符串始终相同(在web.config文件中),并且大多数请求都成功,所以为什么有时这段代码会抛出上面报告的异常?

任何建议都会受到赞赏,我不知道这里出了什么问题。

0 个答案:

没有答案