Держите тот же SPWeb & SPSite на протяжении всего жизненного цикла приложения?
У нас есть несколько проектов со многими DAL. Многие списки sharepoint, такие как клиенты, продажи, провайдеры, отражают классы C#. Мы заставляем каждый объект реализовывать IDisposable через абстрактный материнский класс. И каждый раз, когда мы создаем экземпляр объекта для получения клиента из списка, например, код вызывающей стороны должен вызывать customer.Dispose() для удаления spweb и spsite, используемых для создания экземпляра объекта:
public Customer(int spListItemID):base(LIST_URL)
{
try
{
spli = Liste.GetItemById(spListItemID);
}
catch(ArgumentException)
{
spli = null;
}
}
и в базовом классе конструктора созданы глобальные переменные spsite и spweb, а также есть функция dispose.
Мне было интересно: как насчет использования одного и того же spweb и spsite для всего приложения sharepoint? Все наши проекты знают проект, который может создавать экземпляры spsite и spweb по одноэлементному шаблону. И мы будем использовать этот spsite и spweb "навсегда", мы никогда не закроем их обоих и будем использовать одно и то же для каждого объекта, сохраняя процесс открытия-закрытия каждый раз, когда создаем экземпляр объекта!
Как вы думаете, это сумасшедшая идея, которая будет иметь последствия? Я имею в виду использование одного и того же spweb в течение очень долгого времени, то есть время, когда сервер включен... это плохая идея? вместо открытия закрывающего spweb тысячи раз в день для каждого экземпляра? у паутины ограниченный период жизни? (это большое приложение sharepoint с большим количеством разработок)
1 ответ
Наибольший риск заключается в том, что SPWeb может устареть. В многопользовательской среде свойства SPWeb, которые выбираются в первом цикле обмена (например, веб-заголовок), могут быть изменены другим пользователем, но у вас сохраняются старые значения, поскольку вы не создаете экземпляр заново. Вы можете создать несколько экземпляров SPWeb и SPSite, если вы правильно распорядитесь ими.