不管我怎么做,MySQL.NET适配器都拒绝从Mono连接
我正在尝试与另一台机器上的MySql数据库建立简单连接。我可以在Windows上通过telnet连接到数据源,并使用OSX和Ubuntu上的终端——包括网络内部和外部。但它拒绝通过我在OSX上的mono项目进行连接 我收到: 无法连接到任何指定的MySQL主机 我已经确认没有有效的防火墙规则——在我的OSX或Ubuntu机器上都没有,因为数据库是托管在那里的。MySQL workbench与mono项目位于同一台机器上,可以毫无问题地进行连接 我已尝试通过以下代码连接到数据库: 服务器=myIp;数据库=FK;使用者 ID=乔治;密码=通过;端口=3306 通过预装在OSX上Mono中的插件:不管我怎么做,MySQL.NET适配器都拒绝从Mono连接,mysql,mono,mysql-connector,Mysql,Mono,Mysql Connector,我正在尝试与另一台机器上的MySql数据库建立简单连接。我可以在Windows上通过telnet连接到数据源,并使用OSX和Ubuntu上的终端——包括网络内部和外部。但它拒绝通过我在OSX上的mono项目进行连接 我收到: 无法连接到任何指定的MySQL主机 我已经确认没有有效的防火墙规则——在我的OSX或Ubuntu机器上都没有,因为数据库是托管在那里的。MySQL workbench与mono项目位于同一台机器上,可以毫无问题地进行连接 我已尝试通过以下代码连接到数据库: 服务器=myIp
Tools>Database>adddatabase Connection>MySql数据库
我不使用我的连接字符串——我让它根据我的数据库信息创建自己的连接字符串。然而,这没有什么区别。当我测试我的连接时——它仍然失败,与我尝试通过编程连接时收到的消息相同
托管mySQL数据库的服务器未显示任何连接尝试
我尝试使用5.2 mono.NET连接器和6.3连接器(v2和v4)。没关系,两者都无法连接
我已尝试将程序集放置在GAC中,并在bin目录中本地放置到我的项目中。这没什么区别
我在连接协议中尝试了套接字和tcp,以及内存和管道。没用
这对我来说完全没有意义,为什么我不能连接到我的服务器,在那里它可以在任何地方工作,除了从Mono内部。没有正在运行的防火墙会阻止我的请求
从Mono连接应该不会这么困难,所以在某些地方显然是非常错误的——看到IDE甚至无法连接到数据库
我的凭证是绝对正确的,尽管这无关紧要——因为我甚至不能点击服务器。我假设它正在尝试连接,因为大约需要10-15秒才能收到一个表示它无法连接的响应
当部署到我的Ubuntu服务器(与mySQL服务器位于一个单独的机器和网络上)时,相同的代码连接良好,该服务器通过mono和apache提供服务。这可能是XSP问题吗?我不知道
我花了无数个小时试图让它工作,通过每一个教程和网站,我可以找到从mono连接到mySQL。每个人的结论都和上一次一样,都是失败。有什么帮助吗?以下是我为让它连接所做的
StreamCreator.cs
的CreateSocketStream
方法(请参见代码注释中的)
显然,这是一个丑陋的和黑客。然而,我没有找到其他方法,除了我在上面评论的让OSX+Mono连接的方法。如果没有这些更改,它将无法工作。如果这是Redhat/Fedora,我会说检查SELinux日志。Ubuntu有“AppArmor”--也许它有一个可能会干扰的日志或设置?@Charles I实际上通过遍历MySQL适配器代码发现了这个问题。这与OSX没有被识别为我的操作系统和端点问题有关。我很快就会发布我的解决方案。谢谢
private Stream CreateSocketStream(IPAddress ip, bool unix)
{
EndPoint endPoint;
// You don't need the following lines.
//if (!Platform.IsWindows() && unix)
// endPoint = CreateUnixEndPoint(hostList);
//else
// Instead create a regular IPEndPoint.
endPoint = new IPEndPoint(ip, (int)port);
// Replace the socket it is trying to use with the following.
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
if (keepalive > 0)
{
SetKeepAlive(socket, keepalive);
}
// Remove the async. connection. This hangs and fails. Not sure why.
//IAsyncResult ias = socket.BeginConnect(endPoint, null, null);
//if (!ias.AsyncWaitHandle.WaitOne((int)timeOut * 1000, false))
//{
// socket.Close();
// return null;
//}
try {
// Instead do a regular blocking connect to the endpoint.
socket.Connect(endPoint);
} catch (Exception ex) {
throw;
}
// No longer relevant.
//try
//{
// socket.EndConnect(ias);
//}
//catch (Exception)
//{
// socket.Close();
// throw;
//}
MyNetworkStream stream = new MyNetworkStream(socket, true);
GC.SuppressFinalize(socket);
GC.SuppressFinalize(stream);
return stream;
}