gpt4 book ai didi

asp.net-mvc-4 - 同一台计算机上的两个 Chrome session - 一个将连接到我们的 Azure 网站,另一个 "unable to connect to SQL Server database"

转载 作者:行者123 更新时间:2023-12-02 01:13:23 25 4
gpt4 key购买 nike

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

[SqlException (0x80131904): 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: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)]

HttpException (0x80004005): Unable to connect to SQL Server database.

我所说的间歇​​性是指您可以启动一个新的浏览器 session ,它会再次正常,然后在当天晚些时候它会失败。

网上有很多针对此错误的建议,但这都涉及正确设置连接字符串或修复 web.config 中的 roleManager 或成员资格。这些解决方案似乎都不兼容我们网站上的间歇性错误(即,如果我们的连接字符串或 web.config 不正确,则网站可能总是失败)。

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

但我们有一位用户费力地帮助我们,从他的缓存中删除了与“旧”网站相关的任何内容......这解决了他的问题......但第二天问题又出现在他身上。

更新
最近,我坐在这里,同时进行了 2 个 Chrome 浏览器 session (不同的用户登录),一次又一次地访问该网站。一个 session 出现 100% 错误,其他 session 出现 0% 错误。但我现在无法重现它。对我来说完全没有错误。但用户仍然表示,他们的错误率高达 80% 到 90%。

更新
今天早上它再次出现故障(对于一个浏览器 session ),无论我尝试刷新多少次。我在它旁边启动一个不同的浏览器窗口/身份就可以了。

更新
也许我也有同样的问题问here 。删除 cookies 似乎可以解决我的问题,就像 Mark Heath 的文档一样。目前正在尝试马克自己发布的答案,看看它是否也对我的情况有帮助。

最佳答案

假设您正在使用 Entity Framework

警告:这仅适用于 EF6+。如果您使用 EF5 并遇到此问题,请考虑更新 - 这很容易。

如果您在 Azure 中遇到间歇性数据库连接问题,则应实现重试策略。您可以通过 SqlAzureExecutionStrategy 来完成此操作。此处详细描述:http://msdn.microsoft.com/en-us/data/dn456835.aspx

以下是启用此功能的方法:

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;

代码从这里无耻地被盗:http://msdn.microsoft.com/sv-se/data/dn307226.aspx

关于asp.net-mvc-4 - 同一台计算机上的两个 Chrome session - 一个将连接到我们的 Azure 网站,另一个 "unable to connect to SQL Server database",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24149044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com