【发布时间】:2008-12-02 13:46:02
【问题描述】:
我正在开发一个客户端-服务器解决方案,该解决方案使用 .NET 2.0 Remoting(服务器激活、基于 TCP 通道的二进制格式、Vista Ultimate)进行通信。目前我正在分析应用程序并在同一台机器上运行所有内容。我注意到,如果我启动应用程序,几分钟内一切正常,然后突然每次远程调用都需要几秒钟才能执行。我在两端都登录并记录每个电话。服务器端的实现只需要几分之一秒的时间来执行,而整个远程调用很慢。进一步的分析表明,远程处理在服务器端会降级:虽然远程服务的内部工作在几分之一秒内执行,但响应非常慢。如果我重新启动服务器,几分钟后一切又恢复正常。
有没有人经历过类似的事情?
谢谢!
更新: 我检查过,如果我将远程对象的生命周期配置为 1 天,我仍然遇到同样的问题。
更新: 我正在使用 Ingo Ramer (HOWTO: Use Interface-based remote objects with config files) 建议的模式来处理我的所有远程处理内容,如果这有什么不同的话。
客户端代码:
public static object CreateInstance(Type type)
{
if (!Initialized)
InitWellKnownTypesCache();
WellKnownClientTypeEntry typeEntry = (WellKnownClientTypeEntry)wellKnownTypesCache[type];
if (null == typeEntry)
throw new RemotingException("Type not found.");
if (string.IsNullOrEmpty(serverObjectActivationUri))
throw new RemotingException("ServerObjectActivationUri wasn't configured. Cannot create server object instance.");
return Activator.GetObject(typeEntry.ObjectType, string.Format(serverObjectActivationUri, typeEntry.ObjectUrl));
}
服务器端只有正确的配置文件,如下所示:
<service>
<wellknown
mode="Singleton"
type="MyDomain.SomeDomain, MyDomain"
objectUri="SomeDomainService"
/>
除了 RemotingConfiguration.Configure("MyDomainService.exe.config", false); 我什么都不做在我的服务器和客户端代码中都没有。
【问题讨论】:
-
您是否使用 ANT 或类似的分析器对两端进行了分析?
-
什么是有效载荷?换句话说,你能把服务器的接口分享给我们吗?您来回传递的数据是什么?它在增长吗?是否涉及大量序列化?你的应用程序还在做什么?它是否成为 I/O 密集型的?线程绑定?内存受限?
-
只是简单的数据结构。如果有效载荷很大,它会从一开始就减慢通信速度,而不是在中间。此外,正如我稍后回答的那样,HTTP 传输不会表现出这种行为。
标签: .net remoting client-server