2008-11-17 52 views
1

我们有一个非常奇怪的问题,我们的应用程序之一是通过使用.net远程持续查询服务器,并且应用程序每隔100秒停止查询一段时间,然后重新开始操作。问题出在客户端而不在服务器上,因为应用程序实际上在同一时间查询多个服务器,并在同一时间停止从所有服务器接收数据。.net远程停止每隔100秒

回答

0

我从来没有见过这样的行为,但不幸的是这是一个足够模糊的场景,我想你会很难在这个板子上找到遇到问题的人。这可能与您的应用程序有关。

我认为你可以做一些调查来帮助你缩小问题的范围。

  1. 确定它是否实际上是停滞的客户端或服务器。如果您在确定此问题时遇到问题,请尝试安装数据包筛选器并监控流量以查看谁发送了最后一次数据。您可能无法读取二进制数据,但至少您会了解谁落后。
  2. 一旦确定是客户端还是服务器造成延迟,请尝试调试到应用程序并在出现挂起的位置获取断点。这应该给你足够的细节来帮助追踪问题。或者至少问一个关于SO的更明确的问题。
+0

是的,我知道的是含糊不清,但这是一个老问题(3年),这里没有任何机构能够弄清楚,所以我有兴趣看看有人看到了它。问题出在客户端而不在服务器上 – MichaelT 2008-11-17 15:13:17

3

100秒是一个赠送号码,因为它是.Net中webrequest的默认超时时间。

我以前见过PSI(Microsoft Project中的Project Server接口)没有重写超时,所以应用了100秒的默认值,并且会终止任何与之通话的时间长度。

您是否有权访问所有代码,并确定您已在适用的情况下设置了超时,以便任何默认值都不会在您不知情的情况下应用?

+0

它看起来像一些默认的,但我在谈论远程请求不是一个WebRequest的,并没有发现任何这样的defaul在远程 – MichaelT 2008-11-17 15:10:38

0

应用程序如何编码以实现持续查询?它是否处于连续循环?或与Thread.Sleep循环?或者它是否在定时器上?,

首先确定您的系统是否在您的代码中执行此“触发”时,如果您期望它或者如果是,并且远程服务器没有响应,那么这将是非常有用的。 ..所以,...

如果您不能在可以调试它的开发环境中重现此问题,那么,如果可以,我建议您将代码添加到此循环以写出日志文件(或一些其他的持久性机制)每次它“应该”检查它使用的任何条件来决定是否查询远程服务器,然后在问题再次出现时检查那些日志...

如果你可以做同样的事情在你的远程服务器中,记录什么时候服务器收到远程请求,这将有所帮助...

...哦,是的,只是一个想法,(我不知道你是如何编码这...),但如果您正在客户端中使用单独的线程发出远程请求,并且该通道正在注册,并且在该单独的线程上取消注册,请确保您解除冲突请求,导致无法在同一台计算机上两次注册相同的端口与此同时... (虽然这应该可能已经在你的客户提出了一个异常,如果这是问题)