SharePoint регулярно запускает ваши рабочие процессы в совершенно разных процессах. По крайней мере, вы можете ожидать, что ваши рабочие процессы появятся в:
- рабочий процесс IIS,
- процесс
owstimer.exe
,
- любой произвольный исполняемый файл, который взаимодействует с SharePoint (например, консольное приложение).
В отношении события, которое запустило рабочий процесс и сложность сценария рабочего процесса (!!) SharePoint выбирает процесс, который будет фактически его выполнять. Таким образом, длительный рабочий процесс при запуске из ASP.NET (т.е. рабочий процесс IIS) автоматически перепланируется для запуска в owstimer.exe
.
В результате вы не можете использовать SPContext.Current
. В операциях рабочего процесса вы должны использовать экземпляр WorkflowContext
, который предоставляет свойство Web
. Ваши действия должны объявить свойство зависимости типа WorkflowContext
, чтобы получить доступ к нему - подробнее в MSDN здесь . Шаблон элемента VS предоставит вам необходимый код.
Пример:
public partial class LogEventActivity: Activity
{
public static DependencyProperty __ContextProperty = DependencyProperty.Register("__Context", typeof(WorkflowContext), typeof(LogEventActivity));
[Browsable(true)]
[ValidationOption(ValidationOption.Required)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public WorkflowContext __Context
{
get
{
return (WorkflowContext)base.GetValue(__ContextProperty);
}
set
{
base.SetValue(__ContextProperty, value);
}
}
}