【问题标题】:Random connection problems from Azure C# app to remote MySQL server从 Azure C# 应用程序到远程 MySQL 服务器的随机连接问题
【发布时间】:2016-06-19 11:04:41
【问题描述】:

我有一个连接到远程 MySQL 服务器 (Ubuntu) 的 ASP.NET MVC Web 应用程序。我在自己的 Windows Server 或 localhost 上从来没有遇到过任何问题,但是当我最近将应用程序移动到 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();
}

连接字符串如下:

服务器=x.x.x.x;uid=xxx;pwd=xxx;数据库=xxx;连接 Timeout=10;Pooling=false;Protocol=socket;Port=3306;

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

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

【问题讨论】:

  • “随机连接问题”是什么意思?你的意思是它有时可以正常工作吗?请edit澄清您的问题。
  • 提供的信息不是很有帮助。
  • @OllieJones 确实,大部分时间它工作正常,但有时我收到此连接错误。
  • 您是否在防火墙中将 Azure 应用服务的 IP 地址列入白名单?

标签: c# mysql asp.net azure


【解决方案1】:

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

您的 Ubuntu 服务器有主机名吗?如果是这样,请使用它代替 IP 地址。从 Azure 到您的 Ubuntu 服务器的 IP 路由是稳定的,还是会上下波动?如果从 Azure 主机 ping Ubuntu 服务器会发生什么?

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

【讨论】:

  • 感谢您的回复,我会尝试您的建议。我之前使用了主机名,但将其更改为 IP 以确保不是 DNS 问题。
猜你喜欢
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
相关资源
最近更新 更多