c# - 实体框架随机数据库访问失败
问题描述
我正在使用实体框架来处理我的数据库。我创建了一个 WCF 服务,安装在 IIS 上。
该服务接收大量请求,并且每次都必须更新数据库中的一些记录。有时,数据访问似乎随机失败,并显示以下消息:
System.Data.Entity.Core.EntityException:基础提供程序在打开时失败。---> System.Data.SqlClient.SqlException: Sièverificato un errore di rete o specifico dell'istanza mentre si cercava di stabilire una connessione con SQL Server。Il server non è stato trovato o non è accessibile。Verificare che il nome dell'istanza sia corretto e che SQL Server sia configurato in modo da connessioni connessioni remote。(提供者:SQL 网络接口,错误:26 - Errore nell'individuazione del server/dell'istanza specificata)
堆栈跟踪是
在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 标识、SqlConnectionString connectionOptions、SqlCredential 凭据、对象 providerInfo、String newPassword、SecureString newSecurePassword、布尔重定向用户实例、SqlConnectionString userConnectionOptions、SessionData reconnectSessionData、DbConnectionPool 池、字符串 accessToken、布尔 applyTransientFaultHandling、SqlAuthenticationProviderManager sqlAuthProviderManager )
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConnectionOptions 选项,DbConnectionPoolKey poolKey,DbConnectionOptions 用户选项)
在 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,布尔onlyOneCheckConnection,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 outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, 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 interceptionContext,Action3 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()
--- Fine della traccia dello stack dell'eccezione interna ---
在 System.Data.Entity.Core.EntityClient.EntityConnection.Open()
在 System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean shouldMonitorTransactions)
在 System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean 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 源)
在 C:\MyService.svc.cs:riga 52
写在堆栈跟踪中的代码行 52 是:
using (var db = new Entities())
{
var f = db.Table.FirstOrDefault(x => x.ID == ID); //this line throws the error
...
由于连接字符串始终相同(在 web.config 文件中)并且大部分请求都是成功的,为什么有时这段代码会抛出上面报告的异常?
任何建议表示赞赏,我不知道这里有什么问题。
解决方案
推荐阅读
- java - 安卓:INSTALL_FAILED_INSUFFICIENT_STORAGE
- python - 有没有办法设置多索引 DataFrame 的索引?
- java - “非法尝试将非集合映射为@OneToMany、@ManyToMany 或...”
- linux - Mail 命令将错误日志文件作为附件发送,而不是在 Linux 的正文中发送
- python - 如何在文件Linux / Python中的列表中创建具有名称和扩展名的文件夹中的空文件
- android - 可滚动列中隐藏在键盘后面的输入字段
- google-cloud-platform - 如何启用谷歌云存储桶警报
- java - 使用导航将参数传递给片段
- text - 如何在每一行的另一个文本之前删除文本
- laravel-backpack - 如何更改 laravel 的 webpack 的原色?