私は、通信目的で .NET 2.0 Remoting (サーバーのアクティブ化、TCP チャネルを介したバイナリ形式、Vista Ultimate) を使用するクライアント サーバー ソリューションに取り組んでいます。現在、私はアプリケーションのプロファイリングを行っており、すべてを同じマシンで実行しています。アプリケーションを起動すると、数分間はすべてが正常に機能し、その後突然、各リモート呼び出しの実行に数秒かかることに気付きました。私は両端にログインしており、すべての通話を記録しています。サーバー側の実装は実行にほんの一瞬しかかかりませんが、リモート呼び出し全体は低速です。さらにプロファイリングを行うと、サーバー側でリモート処理が低下することが示されました。リモート サービスの内部作業は数分の 1 秒以内に実行されますが、応答は非常に遅くなります。サーバーを再起動すると、すべてが数分間正常に戻ります。
誰かがそのようなことを経験しましたか?
ありがとう!
更新: リモート オブジェクトの有効期間を 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); 以外は何もしません。私のサーバーでもクライアントコードでもありません。