2009-01-15 45 views
1

我已經得到了可以在許多執行環境中運行的通用代碼 - 在IIS中,在WCF服務中,在獨立應用程序中或在Windows Workflow實例中運行。查找代碼是否在工作流中運行的最佳方法是什麼?

但是,檢查代碼是否在工作流中運行的最佳方法是什麼?就目前而言,我一直在尋找WorkflowEnvironment.WorkflowInstanceID以及與此代碼捕獲任何異常:

... 
try 
{ 
    if (WorkflowEnvironment.WorkflowInstanceId != null) 
    { 
    return ExecutionContext.Workflow; 
    } 
} 
catch 
{ 
} 

// return unknown 
return ExecutionContext.Unknown; 

是不是有更好的辦法?我想刪除對try...catch塊的需求。

回答

0

確實沒有更好的方法來做到這一點。

您可以先檢查的一件事是System.Diagnostics.Trace.CorrelationManager.ActivityId。如果這等於Guid.Empty,那麼您不在使用DefaultWorkflowSchedulerService的工作流程內。不幸的是,手動調度器沒有設置這個ActivityId,所以在這種情況下它沒有幫助。

BTW此ActivityId與工作流沒有任何關係,但是E2E跟蹤activityId也設置爲工作流InstanceId。