0

我正在通过 gatling 性能工具为多个用户测试我的应用程序。当它为同时用户点击登录方法时,一些用户成功登录,但对于某些用户,我得到“底层提供程序在打开时失败”。错误。下面是堆栈跟踪:

at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)

在 System.Data.EntityClient.EntityConnection.Open() 在 System.Data.Objects.ObjectContext.EnsureConnection() 在 System.Data.Objects.ObjectContext.CreateFunctionObjectResult[TElement](EntityCommand entityCommand, ReadOnlyMetadataCollection 1 entitySets, EdmType[] edmTypes, MergeOption mergeOption) at System.Data.Objects.ObjectContext.ExecuteFunction[TElement](String functionName, MergeOption mergeOption, ObjectParameter[] parameters) at System.Data.Objects.ObjectContext.ExecuteFunction[TElement](String functionName, ObjectParameter[] parameters) at Pals.Entities.PalsEntities.sp_FetchVinStatusForAdminCountModifiedAsn(String dealerid, String oemid, String terminalId, Nullable1 fromDate, Nullable1 toDate, String onHoldDisplayFlag) at Portal.Business.Implementation.VinStatusCountAdmin.&lt;&gt;c__DisplayClass1.&lt;FetchVinStatusForAdminCountAsn&gt;b__0() at Microsoft.Practices.TransientFaultHandling.RetryPolicy.ExecuteAction[TResult](Func1 功能)在 Portal.Business.Managers.DashBoardManager.GetVinStatusCountForAdmin(字符串经销商 ID,字符串 oemId,字符串终端 ID,DateTime fromDate,DateTime toDate,字符串 onHoldDisplyaFlag)处TerminalId, DateTime fromDate, DateTime toDate, String boardStatus, String onHoldDisplayFlag) at Portal.Business.Managers.DashBoardManager.GetDashBoardParallel(SimpleSearch objdao, String boardStatus) at Pals.Web.Controllers.SearchController.LoadDashBoardParallel(String DealerId, String shipperId, String terminalId , String fromDate, String toDate, String boardStatus) at lambda_method(Closure, ControllerBase, Object[]) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 个参数)在 System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func 1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList1 过滤器,ActionDescriptor actionDescriptor,IDictionary`2 参数) 在 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)

我在我的应用程序中使用实体框架。

4

1 回答 1

0

(假设您使用的是 EF6)

您是否SqlAzureExecutionStrategy在 EF 配置中指定了?

如果不是(或者如果您不知道我在说什么),那么您需要在与您的 相同的项目中创建一个DbContext继承的类DbConfiguration,并在其构造函数中调用SetExecutionStrategy受保护的方法,如下所示:

using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Data.Entity.SqlServer; 

namespace MyNamespace 
{ 
    public class MyConfiguration : DbConfiguration 
    { 
        public MyConfiguration() 
        { 
            SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy()); 
        } 
    } 
}

// from http://msdn.microsoft.com/en-us/library/dn456835.aspx

您可以使用配置SqlAzureExecutionStrategy来设置重试限制、超时等。

于 2014-05-08T15:30:05.297 回答