2017-02-03 7 views
1

ワークフローで遅延アクティビティを使用するWF4.5サービスが開発中です。ワークフローはAppFabric(Visual Studioでローカルにテスト)でホストされています。 Web.configの設定がサービスにあり、AppFabricがカスタム設定を使用するように設定されています。ここではワークフローのrelevent部分の画像は、次のとおりです。Windows Workflow 4.5遅延アクティビティが持続しない

WorkflowDelayActivity

点を画像から取得するためには、遅延前の活性は、(コミュニケーションを決定)を実行しないと、私はそれの検証証拠を持っているということです。また、遅延アクティビティの後のUpdateRejectionInfoが実行されないことを知っています(ワークフローの実行中にカスタムアクティビティのブレークポイントで検証されます)。

DetermineCommunicationアクティビティと遅延アクティビティの間にpersistアクティビティを追加しようとしましたが、実際には探しているデータベースに保存しています。そのため、サービスにはデータベースへの書き込み権限があります。ヘルプの任意の並べ替えは素晴らしいだろう

<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <sqlWorkflowInstanceStore 
     connectionString="SERVER=hq-sql02\oculusdev;Database=EAA;Trusted_Connection=yes" 
     hostLockRenewalPeriod="00:00:30" 
     runnableInstancesDetectionPeriod="00:00:30" 
     instanceCompletionAction="DeleteNothing" 
     instanceLockedExceptionAction="AggressiveRetry" 
     instanceEncodingOption="GZip"/> 
     <workflowIdle timeToPersist="00:00:20" timeToUnload="00:00:30"/> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

:ここ

はあまりにもサービスのweb.configの動作部分です。

答えて

2

いいえ。だから、この質問への答えは、遅延活動をはるかに超え、私が言及していないことを私が使用している他の技術に入り込む。

TL; DR: 遅延読み込みを無効にするためにエンティティフレームワークオブジェクトを設定しませんでした。したがって、データをシリアライズしているうちに、私は見たことがない例外がスローされ、ワー​​クフローがクラッシュします。

ロングバージョン: データをデータベースに保存すると、プログラムはワークフロースコープ内のすべてのオブジェクトをシリアル化しようとします。これは標準のC#オブジェクトでは正常ですが、複雑なオブジェクトになるとシリアライズが複雑になります。

技術の容易さのために、私はデータベースエンティティを渡して保存するためにプロジェクトでEntity Framework(データベースfirst)を使用しています。 Entity Frameworkエンティティがシリアル化されると、Entity Frameworkエンティティは利用可能なすべての情報を取得しようとします。 Well Entity Frameworkはデータを遅延読み込みするというアイデアを持っているので、データベースからエンティティを取得してより深い層(つまり、外部キーの関係)を取得しようとしている場合は、その情報をデータベースに問い合わせます。エンティティをデータベースから取得する一般的な方法は、エンティティを取得し、ブロックを使用して短期間を使用してデータベース接続を切断することです。

ブロックを使用して短期間(シングルトンエンティティを呼び出すのが好き)、遅延ロードをオフにしないと、プログラムがエンティティをシリアル化しようとすると、要求がすべて開始されます最初のリクエストで取得されなかった余分なデータ。そのブロックを使用して終了した場合、データベース接続は使用できなくなり、例外がスローされます。

私は組み込みのアクティビティが投げていた例外をキャプチャしていないので、実際には失敗したように見えませんでした。

関連する問題