一点背景。我为一家拥有全球 WAN 的公司工作。外部用户通过 VPN 连接到它,并且必须连接到它才能访问他们的电子邮件,当然还有共享的网络目录。
我有一个使用 ClickOnce 从我们的网站发布和安装的 .Net 应用程序。为公司工作和不工作的用户都可以访问此应用程序,并将请求发送到也发布到 Web 服务器的 Web 服务。
由于此问题范围之外的原因,当用户尝试登录应用程序时,他们应该通过显式引用服务器的计算机名称来连接到 Web 服务服务器(即http://**server**/webservice/ws.asmx
。)如果用户未连接到我们的 WAN,他们需要通过我们的网址访问它(即https://**www.companywebsite.com**/webservice/ws.asmx
。)
我知道如何动态设置与 Web 服务关联的 URL。我的问题是我想不出一种快速、可靠和简单的方法来测试 WAN 连接。
Ping
最初,我尝试以相当短的超时时间向服务器发送 ping 请求(使用 .Net类)。但是,当未连接到 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。
我怎样才能做到这一点?