Я работаю над клиент-серверным решением, которое использует .NET 2.0 Remoting (активация сервера, двоичное форматирование по каналу TCP, Vista Ultimate) для коммуникационных целей. В настоящее время я профилирую приложение и запускаю все на одной машине. Я заметил, что если я запускаю приложение, все отлично работает в течение нескольких минут, а затем внезапно каждый удаленный вызов занимает несколько секунд. У меня логирование на обоих концах и часы каждого звонка. Реализация на стороне сервера выполняется всего за долю секунды, тогда как весь удаленный вызов медленный. Дальнейшее профилирование показало, что удаленное взаимодействие ухудшается на стороне сервера: хотя внутренняя работа удаленной службы выполняется в течение доли секунды, ответы очень медленные. Если я перезагружаю сервер, все снова возвращается в нормальное состояние на несколько минут.
Кто-нибудь испытывал что-то подобное?
Спасибо!
UPDATE:
Я проверил, если я настрою время жизни моего удаленного объекта, скажем, 1 день, у меня все еще будет та же проблема.
UPDATE:
Я использую шаблон, предложенный Ingo Ramer ( HOWTO: Используйте интерфейсные удаленные объекты с файлами конфигурации ) для всех моих удаленных действий, если это имеет какое-то значение.
Код клиента:
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); ни в моем сервере, ни в коде клиента.