在连接到数据库之前,如何从C#MOBILE检查MySQL服务器是否处于活动状态

在连接到数据库之前,如何从C#MOBILE检查MySQL服务器是否处于活动状态,c#,mysql,C#,Mysql,我需要一种快速的方法来检查运行MySQL的服务器是否是从C#mobile启动的。 我试过用插座。。。非常慢!!! ... C#mobile中不存在Ping类 有人有什么建议吗?如果您可以在MySQL所在的服务器上托管某种脚本,然后编写一个简单的脚本,连接到本地MySQL,成功时打印1,失败时打印0。从C#mobile使用HTTP查询脚本。这将是imho最可靠的解决方案。调整超时并删除dns解析 IPEndPoint host = new IPEndPoint(IPAddress.Parse("1

我需要一种快速的方法来检查运行MySQL的服务器是否是从C#mobile启动的。 我试过用插座。。。非常慢!!! ... C#mobile中不存在Ping类


有人有什么建议吗?

如果您可以在MySQL所在的服务器上托管某种脚本,然后编写一个简单的脚本,连接到本地MySQL,成功时打印1,失败时打印0。从C#mobile使用HTTP查询脚本。这将是imho最可靠的解决方案。

调整超时并删除dns解析

IPEndPoint host = new IPEndPoint(IPAddress.Parse("192.168.2.222"), 3306);

Socket s = new Socket(AddressFamily.InterNetwork,
s.ReceiveTimeout = 100;
s.SendTimeout = 100;
SocketType.Stream, ProtocolType.Tcp);
s.Connect(host);
if (s.Connected) { 
      MessageBox.Show("Ping Ok!!!"); 
} else {
       MessageBox.Show("Ping not Ok !!!");
}

但是,在高延迟环境(移动网络)中,这可能是不可靠的。

服务器可能还活着并且运行正常,但您的“健康检查”可能超时,导致您认为它已死亡;另一方面,您可能会发现您的服务器非常健康,您继续进行查询,而查询又会超时(情况并没有那么不同)


我建议您假设服务器处于活动状态,并假设每个查询都可以并且将超时,适当地处理各种情况。

如果之前没有检查服务器的充分理由,我相信他不会这样问。尽管你绝对正确,错误随时都可能发生。我想指出的是,即使你在查询服务器之前“检查”了服务器的运行状况,但到了实际运行查询的时候,你可能再也无法执行查询(超时、网络断开等)。即使在非移动环境中也是如此(如果数据库/应用程序/防火墙/代理/广告等崩溃怎么办?如果交换机崩溃怎么办?你明白了…)。简言之:假设查询将失败并进行相应的调整,这样更容易,涉及的检查也更少。Alex,我完全理解你的意思,完全同意,但我只是猜测问题背后有一些合理的原因。:-)也许服务器有时处于脱机状态,而这与网络错误无关。。。也许Ciprian无法访问在检查MySQL是否处于活动状态后将要执行的代码(并且希望将失败的风险降至最低)。。。事实上,他从未说过他会在事后执行任何查询。:-)我需要一个在C#mobile中不可用的Ping类的替代品。Socket非常慢。。所以我排除了更多可能的错误:未连接到wifi网络或服务器已关闭。。。
IPEndPoint host = new IPEndPoint(IPAddress.Parse("192.168.2.222"), 3306);

Socket s = new Socket(AddressFamily.InterNetwork,
s.ReceiveTimeout = 100;
s.SendTimeout = 100;
SocketType.Stream, ProtocolType.Tcp);
s.Connect(host);
if (s.Connected) { 
      MessageBox.Show("Ping Ok!!!"); 
} else {
       MessageBox.Show("Ping not Ok !!!");
}