我有一个 .NET Web 应用程序,可以从本地计算机连接到 SQL Azure,没有任何问题。然后,在同一台计算机上,我在同一解决方案中创建了另一个命令行 .NET 应用程序,将连接字符串从 web.config
复制到 app.config
,引用了与 Web 服务器相同的程序集(我的连接/ Entity Framework /模型层位于其自己的程序集上)并尝试访问我的数据库。我收到以下错误:
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.dll
Additional information: A connection was successfully established with the server,
but then an error occurred during the pre-login handshake. (provider: SSL Provider,
error: 0 - The wait operation timed out.)
现在,在您指出许多其他问题之前,让我提前告诉您:
- 在相同计算机/解决方案上具有相同 .NET 版本的 .NET 应用能够访问相同的内容数据库使用完全相同的连接字符串并使用相同程序集/包版本等,没有任何问题。
- 我已经清理/重建了我的解决方案,重新启动了 Visual Studio,并多次重新启动了我的电脑。
- 我已成功执行
netsh Winsock Reset
,并随后重新启动了我的电脑。 - 我的电脑上没有防病毒/反恶意软件或防火墙。除了 Windows 防火墙和内置 Windows 10 组件之外,从来没有任何其他东西具有这种意义。 (是的,当然,没有特别的 Panda Antivirus。不,也没有臃肿软件,它是原始 Windows 10 安装,而不是 OEM 安装)
- 我尝试过打开和关闭 Windows 防火墙,似乎没有影响。
- 如果有意义的话,机器正在 Parallels 上作为虚拟机运行。 Windows 没有可用的多个网络适配器,因此从这个意义上讲,我的 Web 应用程序和控制台应用程序都使用相同的“Internet 连接”。
- 连接超时为 30 秒,但我立即收到错误消息,而不是在 30 秒后收到错误消息。 (无论如何它都表示已连接成功)
- 这两个项目都在同一台 Windows 10 计算机上运行,通过 Visual Studio 2015 Update 3 进行调试,并且都是针对 .NET Framework 4.6 构建的。
- 过去几周我什至没有碰过这个有问题的项目,几周前它还运行得很好。
- 正如任何可能可疑的事情:我已经安装了 Fiddler,但我总是在它曾经工作的时候安装它。在这几周内,AFAIR,我刚刚安装了 Steam 和 Visual Studio 2017 RC,但它们没有打开。
- 我在 Azure 端没有收到任何可疑错误等。
- 我可以使用 SQL Server Management Studio 使用相同的凭据访问服务器,并毫无问题地查询数据库。 (我在 SSMS 打开、关闭和/或在打开/不打开 SSMS 的情况下重新启动后都遇到同样的问题)。
- 我见过无数关于同一问题的问题,但它们几乎都指向防病毒/防火墙和重置winsock,而我已经做到了。
这是我的连接字符串,完全来自配置文件(敏感信息替换为 XXXX):
<connectionStrings>
<add name="Data" connectionString="Server=tcp:XXXX.database.windows.net,1433;Database=XXXX;User <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8fc6cbb2d7d7d7d7cfd7d7d7d7a1ebeefbeeedeefceaa1f8e6e1ebe0f8fca1e1eafb" rel="noreferrer noopener nofollow">[email protected]</a>;Password=XXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
请记住,其他项目中也使用了完全相同的连接字符串,并且它可以正常工作。
我没主意了。可能出了什么问题?
最佳答案
Server=tcp:XXXX.database.windows.net,1433;Database=XXXX;User [email protected];Password=XXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True;App=EntityFramework"
连接字符串看起来没问题。根据您的描述,控制台应用程序和 Web 应用程序位于同一解决方案中并在同一本地环境中运行,如果防火墙规则阻止应用程序连接到 Azure SQL 数据库,则两个应用程序都不应运行。很难重现该问题,我创建了一个控制台应用程序来创建表并通过 Entity Framework 代码优先方法将记录添加到 Azure SQL 数据库,该应用程序在我这边运行良好。
数据库上下文
class BloggingContext: DbContext
{
public BloggingContext()
: base("name=Data")
{
}
public virtual DbSet<Blog> Blogs { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
模型类
class Blog
{
public Blog(){}
public int BlogId { get; set; }
[StringLength(200)]
public string Name { get; set; }
[StringLength(200)]
public string Url { get; set; }
}
主要方法
class Program
{
static void Main(string[] args)
{
using (var db = new BloggingContext())
{
Console.Write("Enter a name for a new Blog: ");
var name = Console.ReadLine();
var blog = new Blog { Name = name };
db.Blogs.Add(blog);
db.SaveChanges();
var query = from b in db.Blogs
orderby b.Name
select b;
Console.WriteLine("All blogs in the database:");
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
您可以使用我的示例代码创建一个新的控制台应用程序来测试它是否有效。或者您可以在另一台计算机上运行您的应用程序,以确保是否会出现相同的问题。
此外,请确保您是否可以在控制台应用程序中使用以下代码打开数据库连接。
static void Main(string[] args)
{
using (var connection = new SqlConnection(
"Server=tcp: XXXX.database.windows.net,1433;Database= XXXX;User ID= XXXX;Password= XXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True;App=EntityFramework"
))
{
connection.Open();
Console.WriteLine("Connected successfully.");
Console.WriteLine("Press any key to finish...");
Console.ReadKey(true);
}
}
关于.net - SQL Azure : SSL Provider, 错误:0 - 等待操作超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40999981/