Sunday, November 26, 2006 12:11 AM
by
valmond
Заметка о разработке. Транзакции и SharePoint
Иногда сталкиваешься с ситуацией, когда необходимо выполнить в одной транзакции несколько действий с объектной моделью SharePoint.
К сожалению официального решения для этой проблемы не существует, но зато существует один обходной путь, который не решает всех проблем, но в некоторых ситуациях помогает.
Итак...если бы весь код SharePoint был managet, то можно было бы использовать TransactionScope, но т.к. по историческим причинам в SharePoint-е всех версий живет какое-то количество unmanaget кода, то выход можно усмотреть в облегченных COM+ транзакциях.
ServiceConfig Sc = new ServiceConfig();
Sc.Transaction = TransactionOptions.RequiresNew;
Sc.IsolationLevel = TransactionIsolationLevel.ReadCommited;
///set some other Sc properties
ServiceDomain.Enter(Sc);
Try{
SPSite site = new SPSite("….."); Важно!!! Не брать из текущего контекста
///do something with SharePoint OM
ContextUtil.EnableCommit();
}catch{
…
ContextUtil.SetAbort();
}
ServiceDomain.Leave();
Проблема, которая может всплыть при таком решении достаточно очевидна. Это deadlock.