c# - 从 Azure C# 应用程序到远程 MySQL 服务器的随机连接问题

标签 c# mysql asp.net azure

我有一个连接到远程 MySQL 服务器 (Ubuntu) 的 ASP.NET MVC Web 应用程序。我在自己的 Windows Server 或本地主机上从未遇到过任何问题,但是当我最近将应用程序移动到 Azure 应用程序服务时,我收到随机连接错误(有时有效,有时无效):

Unable to connect to any of the specified MySQL hosts.
at MySql.Data.MySqlClient.NativeDriver.Open() 
at MySql.Data.MySqlClient.Driver.Open() 
at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuildersettings)
at MySql.Data.MySqlClient.MySqlConnection.Open()

没有内部异常。我的代码看起来有点像:

using(var con = new MySqlConnection(connectionString))
{
  con.Open();
  using(var cmd = CreateCommand(sql, con))
  {
    cmd.Execute();        
  }
  con.Close();
}

连接字符串如下所示:

server=x.x.x.x;uid=xxx;pwd=xxx;database=xxx;Connection Timeout=10;Pooling=false;Protocol=socket;Port=3306;

本主题描述了相同的问题:

这与 Ubuntu 服务器上的防火墙无关,当连接失败时,我什至在防火墙中看不到传入的请求。我还尝试在连接字符串中使用其他设置。有什么想法吗?

最佳答案

protocol=socket 告诉您的 dot net 实例尝试使用 UNIX 域套接字连接到本地 MySQL 服务器。但显然您正在尝试使用 TCP/IP 连接到远程服务器。从连接字符串中省略 protocol=socket 可能会有所帮助。

您的 Ubuntu 服务器有主机名吗?如果是这样,请使用它代替 IP 地址。从 Azure 到 Ubuntu 服务器的 IP 路由是否稳定,或者是否时断时续?如果从 Azure 主机 ping Ubuntu 服务器会发生什么情况?

注意:考虑使用 tls (ssl) 进行此连接。没有tls的MySQL协议(protocol)不是很安全。

关于c# - 从 Azure C# 应用程序到远程 MySQL 服务器的随机连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37906526/

相关文章:

c# - 如何等到 File.Exists?

c# - 存储库模式 - 切换出数据库并切换到 XML 文件

MySQL如何从三个表中获取值

c# - 使用 OpenID 实现成员(member)系统

c# - 在 LINQ to Entities 中,您如何订购如下?

c# - 如何将 Android 应用程序连接到 Xamarin 中的远程数据库服务器?

内部连接和位置的 MySQL 查询错误

MySQL - 重新启动笔记本电脑,所有数据库都消失了吗?

c# - .NET (ApiController)/jQuery .ajax : what to return from POST?

c# - 在 silverlight 中调用一个 aspx 页面,而不打开它