测试用户是否连接到WAN的最简单方法是什么?

时间:2012-07-18 16:51:55

标签: c# .net winforms networking wan

一点背景知识。我在一家拥有全球广域网的公司工作。外部用户通过VPN连接到它,必须连接到它才能访问他们的电子邮件,当然还有共享网络目录。

我有一个.Net应用程序,使用ClickOnce从我们的网站发布和安装。既为公司工作又不工作的用户可以访问此应用程序,并将请求发送到也发布到Web服务器的Web服务。

出于此问题范围之外的原因,当用户尝试登录应用程序时,他们应通过显式引用服务器的计算机名称(即http://**server**/webservice/ws.asmx)来连接到Web服务服务器。)如果是用户未连接到我们的WAN,他们需要通过我们的网址(即https://**www.companywebsite.com**/webservice/ws.asmx)访问它。)

我知道如何使用Web服务动态设置关联的URL。我的问题是我无法想到一种快速,可靠和简便的方法来测试WAN连接。

最初我尝试将ping请求(使用.Net Ping类)发送到服务器,并且暂停时间相当短。但是,在未连接到WAN的情况下,对服务器调用ping操作会返回一个声明

的异常
  

Ping请求期间发生了一次异常。

以下是与测试WAN连接的属性关联的代码。这很简单,但是当我从网络上测试它时,它会不断给我上述信息。

public static bool ConnectedToWAN
{
  get
  {
    try
    {
      Ping ping = new Ping();
      PingReply reply = ping.Send("server", 2000);
      return reply.Status == IPStatus.Success;
    } 
    catch (Exception e) 
    {/* ' An exeception occurred during the Ping request.' */};
  }

我宁愿不根据我得到的异常返回我的连接状态。相反,我会明确调用可以验证连接的网络。

一个快速说明,我无法检查用户的IP。我们的一些用户为拥有自己的WAN的其他组织工作。由于我在.Net WinForms应用程序中检查他们的IP,因此他们的IP地址可能与他们的WAN相关联。相反,我需要检查它们是否专门连接到我们的 WAN,而不仅仅是任何 WAN。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

WAN上的用户是否可以解析该服务器IP?如果没有,您可以使用DNS查询来确定您的位置。

答案 1 :(得分:1)

我认为问题是如果在公司网络内部连接而不是公共可访问的互联网,则需要解析主机名。

如果是这种情况,您可以使用DNS.BeginGetHostEntry并使用异步方法获取指定主机的域名系统。

例如

var host = '**Internal Server Name**';
Boolean isWANConnected = false;
String ConnectMessage ;
AsyncCallback callBack = new AsyncCallBack(GetHostName);
Dns.BeginGetHostEntry(host, callBack, host);

static void GetHostName(IAsyncResult result)
{
  string hostname = (string)result.AsyncState;
  try
  {
     IPHostEntry host = Dns.EndGetHostEntry(result)
     ConnectMessage = host as String;
  }
  catch(SocketException e)
  {
    isWANConnected = false;
    ConnectMessage = e.Message;
  }
}