如何在c#中有效地检查web服务的可用性?

如何在c#中有效地检查web服务的可用性?,c#,web-services,C#,Web Services,我有一个c#winform桌面应用程序。它通过调用我的[web方法]在我的服务器上检查消息 由于我正在开发这个[web方法],我的测试客户机并不总是可以使用它 尽管如此,客户端仍在调用此[web方法] 我注意到在这个场景中(在我的PC构建中),CPU使用率达到了25% 目前,在while(true)循环中,我的[web方法]在我的客户机上被调用。随后,递归调用[web方法] 此while循环已由新线程启动 Thread _th = new Thread(MyLoop); _th.Start();

我有一个c#winform桌面应用程序。它通过调用我的[web方法]在我的服务器上检查消息

由于我正在开发这个[web方法],我的测试客户机并不总是可以使用它

尽管如此,客户端仍在调用此[web方法]

我注意到在这个场景中(在我的PC构建中),CPU使用率达到了25%

目前,在
while(true)
循环中,我的[web方法]在我的客户机上被调用。随后,递归调用[web方法]

此while循环已由新线程启动

Thread _th = new Thread(MyLoop);
_th.Start();


void MyLoop()
{
  while (true)
  {
    if (Disconnect)
    {
      return;
    }
    string[] _requests = Shared.WSconnector.GetRequests(Shared.ActiveMac);
    //do something with these server requests...
  }
}
我有一个c#winform桌面应用程序。它通过调用我的[web方法]在我的服务器上检查消息

由于我正在开发这个[web方法],我的测试客户机并不总是可以使用它

尽管如此,客户端仍在调用此[web方法]

我注意到在这个场景中(在我的PC构建中),CPU使用率达到了25%

目前,我的[web方法]在我的客户机上以While(true)循环调用。随后,递归调用[web方法]

此while循环已由新线程启动

Thread _th = new Thread(MyLoop);
_th.Start();


void MyLoop()
{
  while (true)
  {
    if (Disconnect)
    {
      return;
    }
    string[] _requests = Shared.WSconnector.GetRequests(Shared.ActiveMac);
    //do something with these server requests...
  }
}
虽然我的Web服务的中断有望降到最低,但它显然仍然可能发生

如何保护我的客户端不受CPU增加的影响

谢谢

虽然我的Web服务的中断有望降到最低,但它显然仍然可能发生


如何保护我的客户端不受CPU增加的影响?

不要在(…)循环中调用web客户端,而是使用
系统.Timers.Timer

调用本身使async:,因此所有这一切都不会涉及任何CPU密集型操作


这自然会导致代码的轻微重新架构,但这是一条路要走

不要在
while(…)
循环中调用web客户端,而是使用
系统.Timers.Timer

调用本身使async:,因此所有这一切都不会涉及任何CPU密集型操作


这自然会导致代码的轻微重新架构,但这是一条路要走

您能展示一些关于如何调用此[web方法]的代码吗?您多久检查一次?我们有一个相似的地方,我们定期测试是否可以到达其他机器。您还可以在while循环中添加睡眠,这样就不会与不可用的系统发生冲突…@Jite Hi,code added.@Offler Hi,感谢您的反馈。我曾经考虑过放一个线程。sleep(1000)在里面,但只是想先在这里检查一下。对我来说,问题是通信需要尽可能的实时。你能展示一些关于如何调用这个[web方法]的代码吗?你多久检查一次?我们有一个相似的地方,我们定期测试是否可以到达其他机器。您还可以在while循环中添加睡眠,这样就不会与不可用的系统发生冲突…@Jite Hi,code added.@Offler Hi,感谢您的反馈。我曾经考虑过放一个线程。sleep(1000)在里面,但只是想先在这里检查一下。对我来说,问题是通信需要尽可能的实时。嗨,我也考虑过这样做。那么你认为我应该把线去掉吗。将“web invoker”代码放入计时器中,然后在计时器中使用异步调用?许多的Thanks@AndrewSimpson:是的,我会在从服务获得任何类型的响应后安排计时器。所以,在启动下一个调度器web服务查询的计时器之后,首先获取responce(成功或失败)。通过这种方式,我将避免仍然在运行的计时器重叠响应,并启动另一个响应调用我的[web方法];this.timer.enabled=true;?谢谢..@AndrewSimpson:正确。只在responce上运行计时器,也就是说。嗨,我也考虑过这样做。那么你认为我应该把线去掉吗。将“web invoker”代码放入计时器中,然后在计时器中使用异步调用?许多的Thanks@AndrewSimpson:是的,我会在从服务获得任何类型的响应后安排计时器。所以,在启动下一个调度器web服务查询的计时器之后,首先获取responce(成功或失败)。通过这种方式,我将避免仍然在运行的计时器重叠响应,并启动另一个响应调用我的[web方法];this.timer.enabled=true;?谢谢..@AndrewSimpson:正确。仅在responce上运行计时器,即。