如何在c#中有效地检查web服务的可用性?
我有一个c#winform桌面应用程序。它通过调用我的[web方法]在我的服务器上检查消息 由于我正在开发这个[web方法],我的测试客户机并不总是可以使用它 尽管如此,客户端仍在调用此[web方法] 我注意到在这个场景中(在我的PC构建中),CPU使用率达到了25% 目前,在如何在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();
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上运行计时器,即。