【发布时间】:2008-11-17 15:00:58
【问题描述】:
我们有一个非常奇怪的问题,我们的一个应用程序正在使用 .net 远程处理不断地查询服务器,并且每隔 100 秒应用程序会停止查询一小段时间,然后恢复操作。问题出在客户端而不是服务器上,因为应用程序实际上同时查询多个服务器,并且同时停止从所有服务器接收数据。
【问题讨论】:
我们有一个非常奇怪的问题,我们的一个应用程序正在使用 .net 远程处理不断地查询服务器,并且每隔 100 秒应用程序会停止查询一小段时间,然后恢复操作。问题出在客户端而不是服务器上,因为应用程序实际上同时查询多个服务器,并且同时停止从所有服务器接收数据。
【问题讨论】:
100 秒是一个赠送数字,因为它是 .Net 中 web 请求的默认超时时间。
我过去曾看到 PSI(Microsoft Project 中的项目服务器接口)没有覆盖超时,因此应用了 100 秒的默认值,并且会终止任何与它通话的时间超过该时间。
您是否有权访问所有代码,并且您确定您已在适用的情况下设置了超时,以便不会在您不知情的情况下应用任何默认值?
【讨论】:
我以前从未见过这种行为,不幸的是,这是一个模糊的场景,我认为您将很难在此板上找到遇到问题的人。它可能特定于您的应用程序。
我认为您可以进行一些调查来帮助您缩小问题范围。
【讨论】:
应用程序是如何编码来实现连续查询的?它是在一个连续的循环中吗?还是带有 Thread.Sleep 的循环?还是在计时器上?,
首先确定您的系统是否在您期望的时候在您的代码中执行这个“触发器”,或者如果它是,并且远程服务器没有响应......所以......
如果您无法在可以调试的开发环境中重现此问题,那么,如果可以,我建议您在此循环中添加代码,以便每次将其写入日志文件(或其他一些持久性机制) “应该”检查它用来决定是否查询远程服务器的任何条件,然后在问题再次发生时查看这些日志......
如果您可以在远程服务器中执行相同的操作,以记录服务器何时收到远程请求,这也会有所帮助...
...哦,是的,只是一个想法,(我不知道您是如何编码的...)但是如果您在客户端中使用单独的线程来发出远程处理请求,并且通道正在在那个单独的线程上注册和取消注册,确保您正在消除请求的冲突,因为您不能同时在同一台机器上注册同一个端口两次...... (尽管如果这是问题所在,这可能会在您的客户中引发异常)
【讨论】: