1

我们有一个非常奇怪的问题,我们的一个应用程序正在使用.net remoting 不断地查询服务器,并且每隔 100 秒应用程序会停止查询一小段时间,然后恢复操作。问题出在客户端而不是服务器上,因为应用程序实际上同时查询多个服务器,并同时停止从所有服务器接收数据。

4

3 回答 3

3

100 秒是一个免费数字,因为它是 .Net 中 webrequest 的默认超时。

我过去曾看到 PSI(Microsoft Project 中的项目服务器接口)没有覆盖超时,因此应用了 100 秒的默认值,并且会终止任何与它对话的时间超过该时间。

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

于 2008-11-17T15:08:22.203 回答
0

我以前从未见过这种行为,不幸的是,这是一个模糊的场景,我认为你很难在这个板上找到遇到问题的人。它可能特定于您的应用程序。

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

  1. 确定实际停止的是客户端还是服务器。如果您在确定这一点时遇到问题,请尝试安装数据包过滤器并监控流量以查看谁发送了最后一个数据。您可能无法读取二进制数据,但至少您会知道谁落后了。
  2. 一旦确定是客户端还是服务器导致了延迟,请尝试调试应用程序并获取发生挂起的断点。这应该为您提供足够的详细信息来帮助追踪问题。或者至少问一个关于 SO 的更明确的问题。
于 2008-11-17T15:09:50.937 回答
0

应用程序如何编码以实现连续查询?它是在一个连续的循环中吗?还是带有 Thread.Sleep 的循环?还是在计时器上?

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

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

如果您可以在远程服务器中执行相同的操作,以记录服务器何时收到远程请求,这也将有所帮助......

...哦,是的,只是一个想法,(我不知道您是如何编码的...)但是如果您在客户端中使用单独的线程来发出远程处理请求,并且正在注册频道,并且在那个单独的线程上取消注册,确保您正在消除请求的冲突,因为您不能同时在同一台机器上注册同一个端口两次......(尽管这可能会在您的客户端中引发异常,如果这是问题)

于 2008-11-17T15:11:05.210 回答