В трехуровневой системе, написанной на DELPHI 5.0, есть несколько разных серверов приложений (в виде EXE-модулей), работающих на одном физическом сервере под Windows 2000 Server и подключающихся к SQL Server 2000 через ADO, есть также несколько соединений между серверами. Сервера стартуются вручную администратором. Все COM-объекты выполняются в MTA, используют учетную запись "Текущий пользователь" (The Interactive user). К ним подключаются клиенты через DCOM, к некоторым серверам до 200 подключений.
Через некоторое время вызовы с рабочих станций начинают отваливаются с различными ошибками (Interface not supported, Сервер RPC недоступен и др.), причем не все, но ошибок пролетает много.
Также бывает другая ситуация — все вызовы к одному серверу начинают отваливаться с ошибкой "Out of memory", причем сервер не обязательно при этом "держит" много памяти (судя по Task Manager'у). После перезапуска этого сервера работает еще какое-то время..
Для исключения ошибок в реализации прикладной части написал тестовую программу, которая создает много потоков, каждый поток подключается к серверу (создает экземпляр COM-объекта), вызывает простой метод и отключается.
Некоторое время, довольно много тестов выполнялись успешно, ни одной ошибки. Затем произошла описанная ситуация, причем ошибки начали периодически возникать в разных местах. Выполнил тест с другой рабочей станции (к тому же серверу), ошибки полезли почти сразу. Такое ощущение, как-будто что-то случается с самой службой COM (или RPC?).
В связи с этим вопрос, в чем может быть проблема? Есть ли какие-либо ограничения на количество или интенсивность DCOM-соединений/вызовов? Можем ли мы неверно использовать саму технологию COM?