[英]SQL Azure: SSL Provider, error: 0 - The wait operation timed out
我有一個.NET Web應用程序,可以從本地計算機毫無問題地連接到SQL Azure。 然后,在同一台計算機上,我在同一解決方案中創建了另一個命令行.NET應用程序,將連接字符串從web.config
復制到app.config
,並引用了與Web服務器相同的程序集(我的連接/實體框架/ model層是自己的程序集),並嘗試訪問我的數據庫。 我收到以下錯誤:
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.)
現在,在您指出其他問題之前,讓我提前告訴您:
netsh Winsock reset
,然后重新啟動了PC。 這是我的連接字符串,完全來自配置文件(敏感信息替換為XXXX):
<connectionStrings>
<add name="Data" connectionString="Server=tcp:XXXX.database.windows.net,1433;Database=XXXX;User ID=XXXX@XXXX.database.windows.net;Password=XXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
請記住,在另一個項目中也使用了相同的連接字符串,並且沒有問題。
我沒主意了。 可能是什么問題?
服務器= tcp:XXXX.database.windows.net,1433;數據庫= XXXX;用戶ID=XXXX@XXXX.database.windows.net;密碼= XXXX; Trusted_Connection = False;加密= True;連接超時= 30; MultipleActiveResultSets = True; App = EntityFramework“
連接字符串似乎正常。 並且根據您的描述,控制台應用程序和Web應用程序在同一解決方案中,並且在相同的本地環境中運行,如果防火牆規則阻止應用程序連接到Azure SQL數據庫,則這兩個應用程序均不應工作。 重現該問題很困難,我創建了一個控制台應用程序來創建表,並通過Entity Framework Code First方法將記錄添加到Azure SQL數據庫中,該應用程序在我這方面工作正常。
dbcontext
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.