gpt4 book ai didi

mysql - 无论我尝试什么,MySQL .NET 适配器都拒绝从 Mono 连接

转载 作者:可可西里 更新时间:2023-11-01 08:21:51 27 4
gpt4 key购买 nike

我正在尝试与位于另一台机器上的 MySql 数据库建立简单连接。我可以在 Windows 上远程登录到数据源,并在 OSX 和 Ubuntu 上使用终端——包括我网络的内部和外部。但是,它拒绝通过我在 OSX 上的单声道项目进行连接。

我收到:

Unable to connect to any of the specified MySQL hosts...

我已经确认没有有效的防火墙规则——在我的 OSX 或 Ubuntu 机器上都没有,数据库是托管的。与 mono 项目位于同一台机器上的 MySQL workbench 能够毫无问题地连接。

我试图通过代码连接到数据库:

Server=myIp; Database=FK; User ID=george; Password=pass; Port=3306

并通过预装在 OSX 上的 Mono 中的插件:

工具 > 数据库 > 添加数据库连接 > MySql 数据库

我不使用我的连接字符串——我让它根据我的数据库信息创建它自己的。但是,这没有什么区别。当我测试我的连接时——它仍然失败,并显示我在尝试以编程方式连接时收到的相同消息。

托管 mySQL 数据库的服务器未显示任何连接尝试。

我尝试同时使用 5.2 单声道 .NET 连接器和 6.3 连接器(v2 和 v4)没关系,都无法连接。

我已经尝试将我的程序集放在 GAC 中,并在本地将我的项目放在 bin 目录中。这没有什么区别。

在连接协议(protocol)中,socket和tcp我都试过了,memory和pipe也都试过了。没有效果。

我完全无法理解为什么我无法连接到我的服务器,它在其他任何地方都可以工作,除了从 Mono 内部。 没有正在运行的防火墙会阻止我的请求。

从 Mono 连接应该不难,所以显然某处非常错误 -- 看到 IDE 甚至无法连接到数据库。

我的凭据绝对正确,尽管这并不重要——因为我什至无法访问服务器。我假设它正在尝试连接,因为大约需要 10-15 秒才能收到无法连接的响应。

当部署到我的 Ubuntu 服务器(与 mySQL 服务器位于单独的机器和网络上)时,完全相同 代码连接良好,它通过 mono 和 apache 提供服务。会不会是 XSP 的问题?我不知道。

我花了无数个小时试图让它工作,遍历了我能找到的关于从 mono 连接到 mySQL 的所有教程和网站。每个人都以与上一个相同的方式得出结论,失败。有帮助吗?

最佳答案

这是我为让它连接所做的工作。

  1. 下载 MySql.Data 适配器的源代码。
  2. 替换StreamCreator.csCreateSocketStream方法(见代码注释)

     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;
    }

显然,这很丑陋,而且很乱。但是,除了我上面评论的让 OSX + Mono 连接之外,我没有找到其他方法。如果没有这些更改,它根本无法工作。

关于mysql - 无论我尝试什么,MySQL .NET 适配器都拒绝从 Mono 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5940849/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com