Я создал приложение ASP.NET. Мне нужно использовать SDK стороннего COM-объекта для управления документами. Название приложения «Interwoven». В соответствии с документацией COM-объекта вам следует «Никогда не создавать более одного объекта IMANDMS для каждого приложения».Как управлять доступом COM в приложении ASP.NET
Итак, я решил создать один экземпляр объекта IManDMS и сохранить его в переменной приложения. Вот функция, которую я использую, чтобы получить объект IManDMS:
public static IManDMS GetDMS()
{
IManDMS dms = HttpContext.Current.Application["DMS"] as IManage.IManDMS;
if (dms == null)
{
dms = new IManage.ManDMSClass();
HttpContext.Current.Application["DMS"] = dms;
}
return dms;
}
…
// Here is a code snippet showing its use
IManage.IManDMS dms = GetDMS();
string serverName = "myServer";
IManSession s = dms.Sessions.Add(serverName);
s.TrustedLogin();
// Do something with the session object, like retrieve documents.
s.Logout();
dms.Sessions.RemoveByObject(s);
…
Приведенный выше код работает отлично, если только один человек запрашивает страницу .aspx в то время. Когда 2 пользователей одновременно запросить страницу, я получаю следующее сообщение об ошибке:
[Sessions ][Add ]Item "SV-TRC-IWDEV" already exists in the collection
Видимо, вы не можете добавить более одного сеанса к объекту IManDMS, с тем же именем, в то же время. Это означает, что я могу открыть только один сеанс для всего приложения в любой момент времени.
Есть ли у кого-либо, кто имеет опыт работы с подобной проблемой, и может предложить предложение о том, как обойти эту проблему, если я не могу создать более одного объекта IManDMS для каждого приложения?
Спасибо.
К сожалению, я не могу добавить другое имя. Имя указывает, к какому серверу подключиться. Существует только один сервер. Использование инструкции «lock», похоже, делает трюк. Спасибо за помощь. –