解决IIS ASP.NET 网站发布后出现错误 Unable to connect to any of the specified MySQL hosts

服务器上安装了MySQL后,发现某些ASP.NET网站打开会出现machine.config配置错误,后来在解决问题的过程中发现,这可能是MySQL的一个BUG,不过倒是有解决的方法,国外很多猿类也遇到这个问题,经过我的研究整理出了几个解决方法,都是十分有效的,主要还是和MySQL Connector/NET这个驱动程序有关系!

先贴下具体的错误信息和截图:

Unable to connect to any of the specified MySQL hosts错误截图

“/”应用程序中的服务器错误。

配置错误

说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。

分析器错误消息: Unable to connect to any of the specified MySQL hosts.

源错误:
行 284:    <siteMap>
行 285:      <providers>
行 286:        <add name="MySqlSiteMapProvider" type="MySql.Web.SiteMap.MySqlSiteMapProvider, MySql.Web, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/" />
行 287:      </providers>
行 288:    </siteMap>

源文件: C:/Windows/Microsoft.NET/Framework/v4.0.30319/Config/machine.config    行: 286

版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.6.1055.0

先简单分析下错误信息,其实可以很直观看出问题出在machine.config中name="MySqlSiteMapProvider"这个节点。这个配置是具体是干啥的我也说不清楚,也是比较懒没去研究。稍微排查下发现在安装MySQL Connector/NET驱动程序时,会自动在machine.config加上这段配置。可以通过web平台安装程序检查下,肯定能找到这个驱动程序:

相关组件

也可以通过控制面板的卸载或更改程序找到:

在卸载程序中找到相关程序

接下来直接列举我整理出的三个解决方法。

方法一:通过web.config移除引发错误的MySqlSiteMapProvider节点

这个方法我比较推荐使用,主要是非常安全,不会影响到IIS上其他网站。在不能随便改动服务器相关配置的情况下十分合适。只要在出问题的网站中,通过在web.config的system.web节点下添加如下配置即可:

<siteMap>
    <providers>
        <removename="MySqlSiteMapProvider"/>
    </providers>
</siteMap>

另外要注意siteMap和providers节点是否存在,如果存在直接添加

<removename="MySqlSiteMapProvider"/>

最后重新启动网站并刷新页面测试下。这种解决方法属于自立自强型,强制排除掉machine.config错误配置的干扰。如果其他网站也有相同问题,依然要按照这个步骤移除错误的配置节点。

这里有四个可供参考的资料:

  1. ASP.NET Cannot Find MySQL Host Even Though I'm Not Using MySQL
  2. Error in MySql host after adding Master page in asp.net c#
  3. Getting error: “Unable to connect to any of the specified MySQL hosts.” In an application that doesn't use MySQL
  4. MySqlSiteMapProvider – Unable to connect to any of the specified MySQL hosts error in .NET website(这个页面可能需要科学上网才能打得开,所以这边也将关键部分截图下)相关博客页面截图

方法二:通过更改MySQL 的.NET驱动程序,禁用Web Providers功能

首先可以肯定的是,这个问题就是由Web Providers功能引起的,删除和禁用后问题解决,可以发现machine.config中出错的配置都会自动删除。

注意:禁用此功能的后果暂时不知,所以如果有在生产环境遇到此问题的,还是小心谨慎的好,需要评估可能产生的风险!!!我是在开发环境中操作的,所以可以很随意。不过好处是可以一步到位,其它也有相同错误的网站就不用按照方法一逐个修改了。

打开控制面板,进入卸载和更改程序的操作界面,如下图所示找到MySQL Connector Net,右键打开选择菜单,点击更改:

步骤一更改相关的驱动程序

在更改界面中将Web Providers禁用掉,点击NEXT并完成剩下的步骤:

步骤二禁用Web Providers

方法三:根据错误信息直接删除machine.config中引发异常的节点

这种方法比较粗糙,注意的地方和方法二一样,一般来说涉及到系统层面的配置修改都要小心,否则会引发一连串的问题。

另外还要注意32位和64位系统的差别,对应的machine.config位置如下:

  • 32位   C:/Windows/Microsoft.NET/Framework/v4.0.30319/Config
  • 64位   C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Config

打开machine.config配置文件,并删除如下图中红框里的节点即可(谨慎点可以先注释!):

删除machine.config中出现问题的配置节点


还有建议看下这个帖子,对这个问题很多人都提出了解决方法和自己的见解:ERROR: Unable to connect to any of the specified MySQL hosts.

最后额外提及一个MySql.Web.v20的问题,具体错误和本文提到的问题类似,刚兴趣的朋友可以到MYSQL官网资料查看:Bug #74080

国外也有个哥们也遇到这个问题并写了博客:C# with MySQL Error(2018/04/07 备注:博客已经打不开了)




原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98904.html

(0)
上一篇 2021年8月21日
下一篇 2021年8月21日

相关推荐

发表回复

登录后才能评论