【问题标题】:Error only occurs after publishing: "Unable to connect to any of the specified MySQL hosts."仅在发布后出现错误:“无法连接到任何指定的 MySQL 主机。”
【发布时间】:2012-03-19 12:10:28
【问题描述】:

在开发过程中,程序运行良好,但发布后我注意到我的元素没有正确填充。起初我以为是更新面板的问题,但有人告诉我使用 Firebug,这是我看到的错误。

再次: “无法连接到任何指定的 MySQL 主机。”

我的代码(这部分来自web.config):

    <connectionStrings>
    <add name="MySQLConnection"    connectionString="[myServer];[myDatabase];UID= [myID];PWD=[myPassword];"
    providerName="MySql.Data.SqlClient" />
    </connectionStrings>

在 C# 中,我这样称呼连接字符串:

    string connstring = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["MySQLConnection"].ConnectionString;
    MySqlConnection myConnection = new MySqlConnection(connstring);

任何关于为什么这不起作用,或者为什么它在开发中起作用而不是一经发布的意见,我们将不胜感激。

谢谢。

编辑:新信息

天哪,这太疯狂了。

所以我的程序有第二个 web.config 文件,而我之前在该文件中放入了一个数据不正确的连接字符串。当程序运行时,这就是它试图使用的东西,这就是它不起作用的原因。或者我是这么想的。

当然,在认为它是同一个文件之后,我发现了这一点,只是尝试更新它。最后我从旧文件中完全删除了连接字符串,你知道吗,我现在知道它使用了正确的连接字符串。

对我来说太棒了,对吧?没有。

我现在知道它使用了正确的连接字符串,但它仍然无法正常工作。

话虽如此,我添加了一些更好的故障排除,所以现在我有了这个:

    MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the             specified MySQL hosts. ---> System.Security.SecurityException: Request for the permission             of type 'System.Net.SocketPermission, System, Version=4.0.0.0, Culture=neutral,             PublicKeyToken=b77a5c561934e089' failed.
    at System.Security.CodeAccessSecurityEngine.Check(Obj ect demand, StackCrawlMark&             stackMark, Boolean isPermSet)
    at System.Security.CodeAccessSecurityEngine.Check(Cod eAccessPermission cap,             StackCrawlMark& stackMark)
    at System.Security.CodeAccessPermission.Demand()
    at System.Net.Sockets.Socket.CheckCacheRemote(EndPoin t& remoteEP, Boolean         isOverwrite)
    at System.Net.Sockets.Socket.BeginConnectEx(EndPoint remoteEP, Boolean flowContext,             AsyncCallback callback, Object state)
    at System.Net.Sockets.Socket.BeginConnect(EndPoint remoteEP, AsyncCallback         callback,     Object state)
    at MySql.Data.Common.StreamCreator.CreateSocketStream (IPAddress ip, Boolean unix)
    at MySql.Data.Common.StreamCreator.GetStream(UInt32 timeout)
    at MySql.Data.MySqlClient.NativeDriver.Open()
    The action that failed was:
    Demand
    The type of the first permission that failed was:
    System.Net.SocketPermission
    The Zone of the assembly that failed was:
    MyComputer
    at MySql.Data.MySqlClient.NativeDriver.Open()
    at MySql.Data.MySqlClient.Driver.Create(MySqlConnecti onStringBuilder settings)
    at MySql.Data.MySqlClient.MySqlPool.GetPooledConnecti on()
    at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
    at MySql.Data.MySqlClient.MySqlPool.GetConnection()
    at MySql.Data.MySqlClient.MySqlConnection.Open()
    at WordsOfPower.testing.update_words() in C:\Users\AJ\documents\visual studio         2010\Projects\WordsOfPower\WordsOfPower\WordsOfPow er.aspx.cs:line 39

最终编辑:我更新了我的 web.config 以使用完全信任。

http://support.winhost.com/KB/a657/changing-the-default-aspnet-trust-level.aspx

【问题讨论】:

  • 很多事情要检查。首先,连接字符串在生产和您的开发中是否应该相同?你的生产服务器真的可以看到 mysql 盒子吗?
  • 只是为了说明:我的“生产”系统是我在 winhost 上购买的 webspace,我的“开发”环境是我个人计算机上的 Visual Web Studio 2010。话虽如此,我正在连接到同一个数据库,所以我根本不知道为什么我需要更改连接字符串。我已经尝试过添加一个端口,但这只是引起了问题。
  • 该错误仅表示Web服务器无法找到数据库服务器。这有很多不同的原因,例如数据库服务器可能位于防火墙后面,不允许从您的主机访问。
  • 我想我可能已经弄清楚了我遇到的问题,但我还没有完全破解它。看起来我在服务器上的 web.config 是不正确的旧版本。由于某种原因,当我发布我的程序时它拒绝更新。
  • 不幸的是,VS 有时并不总是发布您认为应该发布的所有内容。通常它涉及服务器日期/时间与您 PC 的日期/时间之间的不匹配。如果增量足够大,随机配置,aspx 和其他一些文件永远不会被推送。

标签: c# asp.net mysql html


【解决方案1】:

确保 web.config 文件中的连接字符串正确

<add name="STRING_CONNECTION" connectionString="Server=[SERVER];Database=[DATA BASE NAME];Uid=[USER];Pwd=[PASSWORD];" providerName="MySql.Data.MySqlClient"/>

【讨论】:

  • 我只是仔细检查了一遍,看起来我在这方面做得很好。还在寻找,我想我可能已经想通了。
【解决方案2】:

【讨论】:

  • 是的,我就是这么想的。
猜你喜欢
  • 2019-12-22
  • 2021-10-26
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 2011-06-07
相关资源
最近更新 更多