Asp.net mvc 4 同一台机器上有两个Chrome会话-一个连接到我们的Azure网站,另一个;无法连接到SQL Server数据库";

Asp.net mvc 4 同一台机器上有两个Chrome会话-一个连接到我们的Azure网站,另一个;无法连接到SQL Server数据库";,asp.net-mvc-4,azure,Asp.net Mvc 4,Azure,Azure网站出现问题,该网站间歇性失败,出现以下错误: [SqlException(0x80131904):建立与SQL Server的连接时发生网络相关或特定于实例的错误。找不到或无法访问该服务器。请验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:SQL网络接口,错误:26-定位指定的服务器/实例时出错)] 及 HttpException(0x80004005):无法连接到SQL Server数据库 我的意思是,你可以开始一个新的浏览器会话,它会再次正常,然

Azure网站出现问题,该网站间歇性失败,出现以下错误:

[SqlException(0x80131904):建立与SQL Server的连接时发生网络相关或特定于实例的错误。找不到或无法访问该服务器。请验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:SQL网络接口,错误:26-定位指定的服务器/实例时出错)]

HttpException(0x80004005):无法连接到SQL Server数据库

我的意思是,你可以开始一个新的浏览器会话,它会再次正常,然后在一天的晚些时候它会失败

在线上有很多关于此错误的建议,但都涉及到正确设置您的连接字符串或修复web.config中的角色管理器或成员身份。这些解决方案似乎都与我们网站上的间歇性错误不兼容(也就是说,如果我们的connectionstring或web.config不正确,那么网站可能总是会失败)

可能与此相关的是,我们有一个现有的网站
foo.azurewebsites.net
和代码库,我们切换到
bar.azurewebsites.net
,并大幅更改了代码库(尽管从相同的原始文件开始)。我们还添加了一些简单的角色管理代码。是否可能因为缓存,新站点有时试图连接到旧站点的数据库(现在已不存在)

但是我们已经有一个用户费劲地帮了我们,从他的缓存中删除了任何与“旧”站点相关的内容…这解决了他的问题…但是第二天问题又出现了

更新
最近我坐在这里,有两个并排的Chrome浏览器会话(不同的用户登录),一次又一次地访问该站点。一个会话出现100%的错误,另一个0%的错误。但我现在无法重现。我一点错误都没有。但用户仍然说他们在80%到90%的时间里都会出现巨大的错误率

更新
今天早上它再次关闭(一次浏览器会话),但我尝试刷新了很多次。我在它旁边启动了一个不同的浏览器窗口/标识就可以了

更新

也许我也有同样的问题。删除cookie似乎可以解决我的问题,就像Mark Heath文档一样。目前正在尝试答案,Mark将自己张贴在那里,看看这是否对我的情况也有帮助。

假设您使用的是实体框架

<> >强>警告<强>:这仅适用于EF6+。如果你在EF5中并有这个问题,考虑更新-很容易。

如果Azure中存在间歇性数据库连接问题,则应实施重试策略。您可以通过
SqlAzureExecutionStrategy
执行此操作。此处详细介绍了这一点:

以下是如何启用此功能:

public class MyConfiguration : DbConfiguration 
{ 
    public MyConfiguration() 
    { 
        SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy()); 
    } 
}
然后,您需要使用配置属性修饰DbContext:

[DbConfigurationType(typeof(MyConfiguration))]
public class MyDbContext : DbContext 
{
// blah
}
如果您已手动启动事务,则需要禁用重试策略。为此,您需要将MyConfiguration更改为如下所示:

public class MyConfiguration : DbConfiguration 
{
    public MyConfiguration()
    {
        this.SetExecutionStrategy("System.Data.SqlClient", () => SuspendExecutionStrategy
              ? (IDbExecutionStrategy)new DefaultExecutionStrategy()
              : new SqlAzureExecutionStrategy(1, TimeSpan.FromSeconds(30))); 
    }

    public static bool SuspendExecutionStrategy
    {
        get
        {
            return (bool?)CallContext.LogicalGetData("SuspendExecutionStrategy") ?? false;
        }
        set
        {
            CallContext.LogicalSetData("SuspendExecutionStrategy", value);
        }
    } 
}
MyConfiguration.SuspendExecutionStrategy = true;
// start transaction
// do transaction stuff here
// commit/rollback transaction
MyConfiguration.SuspendExecutionStrategy = false;
并按如下方式包装事务调用:

public class MyConfiguration : DbConfiguration 
{
    public MyConfiguration()
    {
        this.SetExecutionStrategy("System.Data.SqlClient", () => SuspendExecutionStrategy
              ? (IDbExecutionStrategy)new DefaultExecutionStrategy()
              : new SqlAzureExecutionStrategy(1, TimeSpan.FromSeconds(30))); 
    }

    public static bool SuspendExecutionStrategy
    {
        get
        {
            return (bool?)CallContext.LogicalGetData("SuspendExecutionStrategy") ?? false;
        }
        set
        {
            CallContext.LogicalSetData("SuspendExecutionStrategy", value);
        }
    } 
}
MyConfiguration.SuspendExecutionStrategy = true;
// start transaction
// do transaction stuff here
// commit/rollback transaction
MyConfiguration.SuspendExecutionStrategy = false;

不知羞耻地从这里盗取代码:

让我仔细检查一下:如果您打开了两个不同的浏览器,都打开了bar.azurewebsites.net,但作为不同的应用程序用户登录。那么其中一个会话将保持与数据库的连接,另一个会话将始终无法连接?这与用户有关吗?或者有时是第二个会话无法连接到DB?@trailmax几天前,我坐在这里,有两个并排的浏览器会话,如上所述,一次又一次地访问该站点。一个会话出现100%错误,另一个0%错误。但我现在无法重现。我一点错误都没有。但用户仍然说他们的错误率高达80%到90%。你在做什么DB上下文中有什么特别的东西吗?如何提供连接字符串?是否有DbContext源代码?@trailmax只是UsersContext的开箱即用的东西。所有这些都是由visual studio自动生成的。例如:`Public Class UsersContext继承DbContext Public Sub New()MyBase.New(“DefaultConnection”)End Sub-Public Property UserProfiles As DbSet(Of UserProfile)End ClassI阅读下面的答案和上面的注释。在我看来,您应该开始记录异常(和常规日志记录)因为现在你的用户引用了80%和90%的错误率,但你没有数据来确认。此外,如果是这样的话,它将帮助你解决问题,并能够向Azure支持部门提供文档。我认为更好的错误度量标准将真正帮助你。如果你不顾一切,请尝试部署到云服务我们使用的是EF5,当你说它很容易更新时,你能指出一些更新的指导原则吗?简单点:。只是要注意,如果你用EF6运行迁移,它会改变_MigrationHistory表的结构,所以没有办法回到EF5。我已经Ged关于更新的问题:谢谢trailmax,嗯。有几件事让我担心在整个应用程序中实现此功能可能没有任何好处:1)我们几乎从来没有看到过这个错误(而且我们经常碰到它/测试它),而我们的用户群说他们“大部分时间”都会看到这个错误,其中一些人说“90%的时间”,这并不会让它看起来像Azure中偶尔出现的古怪行为,更像是与他们设备上的缓存有关。如果对某些用户来说是100%,那么它就不是Azure,所以放弃我的建议。