WorkflowInstance.EnqueueItemOnIdle メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ワークフローがアイドル状態のときに、指定したワークフロー キューにメッセージをポストします。 EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) は、ワークフローがアイドル ポイントに達するまで待機し、ワークフロー スケジューラがアイドル状態である (つまりアクティブな操作が実行されていない) ことを確認した後にキューに登録します。
public:
void EnqueueItemOnIdle(IComparable ^ queueName, System::Object ^ item, System::Workflow::Runtime::IPendingWork ^ pendingWork, System::Object ^ workItem);
public void EnqueueItemOnIdle (IComparable queueName, object item, System.Workflow.Runtime.IPendingWork pendingWork, object workItem);
member this.EnqueueItemOnIdle : IComparable * obj * System.Workflow.Runtime.IPendingWork * obj -> unit
Public Sub EnqueueItemOnIdle (queueName As IComparable, item As Object, pendingWork As IPendingWork, workItem As Object)
パラメーター
- queueName
- IComparable
WorkflowQueue の名前。
- item
- Object
キューに登録するオブジェクト。
- pendingWork
- IPendingWork
IPendingWork が配信されたときに送信者が通知を受けられるようにする item
。
- workItem
- Object
IPendingWork メソッドに渡すオブジェクト。
例外
queueName
が null 参照 (Visual Basic の場合は Nothing
) です。
ワークフロー ランタイム エンジンが実行されていません。
または - ワークフロー インスタンスが中断されています。
または - WorkflowQueue で指定された
queueName
が存在しません。または - WorkflowQueue で指定された
queueName
が無効になっています。
例
次の例は、EnqueueItemOnIdle
メソッドを使用してワークフロー インスタンスに情報を送信する方法を示しています。 最初に WorkflowInstance オブジェクトが作成されて開始されます。次に IPendingWork インターフェイスを実装するオブジェクトが作成されます。 EnqueueItemOnIdle
が呼び出され、キュー名、エンキューされた項目、および pendingWork オブジェクトのメソッドに渡される作業項目の文字列値が渡されます。
// Create a workflow runtime environment
WorkflowRuntime workflowRuntime = new WorkflowRuntime();
// Create a new instance of the out-of-box SqlWorkflowPersistenceService.
// Use the non-locking constructor, since we're only creating a single Workflow Runtime.
NameValueCollection parameters = new NameValueCollection();
parameters.Add("ConnectionString",
"Initial Catalog=SqlPersistenceService;Data Source=localhost;Integrated Security=SSPI;");
//Set UnloadOnIdle to true, so that the service will persist the workflow
parameters.Add("UnloadOnIdle", "true");
SqlWorkflowPersistenceService persistenceService =
new SqlWorkflowPersistenceService(parameters);
// Add the service to the runtime
workflowRuntime.AddService(persistenceService);
// Create a WorkflowInstance object
WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(typeof(Workflow1));
// Start the instance
workflowInstance.Start();
// Create an instance of a class that implements IPendingWork for notification
PendingService pendingWork = new PendingService();
// Send the workflow the message
workflowInstance.EnqueueItemOnIdle("ActionQueue", "StartWork", pendingWork, "ActionItem");
' Create a workflow runtime environment
Dim workflowRuntime As New WorkflowRuntime()
' Create a new instance of the out-of-box SqlWorkflowPersistenceService.
' Use the non-locking constructor, since we're only creating a single Workflow Runtime.
Dim parameters As New NameValueCollection()
parameters.Add("ConnectionString", _
"Initial Catalog=SqlPersistenceServiceData Source=localhostIntegrated Security=SSPI")
'Set UnloadOnIdle to true, so that the service will persist the workflow
parameters.Add("UnloadOnIdle", "true")
Dim persistenceService As _
New SqlWorkflowPersistenceService(parameters)
' Add the service to the runtime
workflowRuntime.AddService(persistenceService)
' Create a WorkflowInstance object
Dim workflowInstance As WorkflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1))
' Start the instance
workflowInstance.Start()
' Create an instance of a class that implements IPendingWork for notification
Dim pendingWork As New PendingService()
' Send the workflow the message
workflowInstance.EnqueueItemOnIdle("ActionQueue", "StartWork", pendingWork, "ActionItem")
注釈
ワークフロー インスタンスがアイドル状態になるまで待機してから、指定した item
に WorkflowQueue を送信します。 ワークフロー インスタンスが中断状態のときに EnqueueItemOnIdle を呼び出すと、ワークフロー ランタイム エンジンは InvalidOperationException をスローします。 メッセージが配信されたときに通知を受けるには、サービスに IPendingWork を実装して、workItem
および IPendingWork オブジェクトを EnqueueItem に渡します。 そのような通知が不要な場合は、Nothing
と pendingWork
に null 参照 (Visual Basic の場合は workItem
) を渡します。
ステート マシン ワークフローでこのメソッドを使用している場合、"Queue '{0}' is not enabled" というメッセージを含む例外が発生する可能性があります。 これは、ステート マシンの現在の状態では特定のイベントの処理方法を識別できないときに起こります。 たとえば、現在の状態以外の状態に、キュー '{0}' で表現される EventDrivenActivity を含む HandleExternalEventActivity が含まれている場合です。