通过评估服务器回复尝试服务器连接

问题描述:

我正在C#中制作一个程序,该程序需要与服务器建立连接。 为了消除服务器故障,我使用冗余来构建它。 由于这个原因,我在与它看起来像这样服务器地址文本文件里:通过评估服务器回复尝试服务器连接

2011-09-21 18:01 
http://server1.server.com 
http://server2.server.com 
http://server3.server.com 

的日期还有以确保方案具有服务器的一个新的列表。 它开始时的第一件事就是下载这个列表并比较日期。 如果下载的文件具有较新的日期,它将替换较旧的文件。

我现在想要发生的事情是,我希望程序读取文件并列出可能的服务器列表(已完成),然后遍历列表以找到正在给出的服务器服务器期待的回复。

一旦收到答复,它应该停止检查并将变量“server”设置为刚刚响应正确的服务器。

我一直在试图用下面的程序,没有任何的运气:

int srvs = servers.Count(); 
int i = 0; 
string response = string.Empty; 
while (i < srvs) 
{ 
    var client = new WebClient(); 
    try 
    { 
     response = client.DownloadString(servers[i] + "testcon.php"); 
    } 
    catch (WebException wex) 
    { 
    } 
    finally 
    { 
     if (response == "OK") 
     { 
      server = servers[i]; 
     } 
    } 
    if (servers.Contains(server)) 
     break; 
    i++; 
} 

这没有工作,也没有停止循环,直到它在列表的末尾。 我想接下来的事情,是这样的:

var client = new WebClient(); 
foreach (string s in servers) 
{ 
    try 
    { 
     response = client.DownloadString(s + "testcon.php"); 
    } 
    catch (WebException wex) 
    { 
    } 
    finally 
    { 
    if (response == "OK") 
     server = s; 
    } 
     break; 
    } 

我应该怎么做才能让它停止和设置服务器为预期的响应的第一台服务器(目前与“OK”)。

+1

出病态的好奇心,为什么不使用集群选项或DNS轮循? –

+0

由于两个原因:1.我不知道如何设置群集,但实际购买两个群集VPS /根服务器除外。和2:我不知道如何设置DNS循环。我使用的服务器位于世界上不同的位置,我知道服务器所有者,所以我可以免费获得它们。虽然对于最后一个问题/答案..这是我会查找的东西。 :) – Rickard

这样的:

int srvs = servers.Count(); 
int i = 0; 
string response = string.Empty; 
while (i < srvs) 
{ 
    var client = new WebClient(); 
    try 
    { 
     response = client.DownloadString(servers[i] + "testcon.php"); 
     if (response == "OK") 
     { 
      server = servers[i];. 
      break; 
     } 
    } 
    catch (WebException wex) 
    { 
    } 
    i++; 
} 

或本:

var client = new WebClient(); 
foreach (string s in servers) 
{ 
    try 
    { 
     response = client.DownloadString(s + "testcon.php"); 
     if (response == "OK") 
     { 
      server = s; 
      break; 
     } 
    } 
    catch (WebException wex) 
    { 
    } 
} 
+0

嘿,谢谢。我首先尝试了这一点,但后来我收到了以下消息:错误控制无法离开finally子句的主体 – Rickard

+1

为什么将它放在finally块中?您可以根据您的要求进行评估,也可以在您的catch块中添加“continue”,并在try-catch结构之后进行评估。这两个选项意味着跳过最后。 – havardhu

+0

已更新我的原始答案。 –