1

.NET 4.0 ASP.NET MVCアプリケーションがあり、WorkflowFoundation4.0もホストしています。このワークフロー内から、一部のカスタムワークフローアクティビティがコードを実行して、LinqtoSQLを使用してデータベースの更新を実行します。コードはメソッドの呼び出しで構成され、メソッドは他のメソッドなどを呼び出します。データアクセスファクトリを持つビジネスレイヤーもあり、データベース操作のメソッドを含むすべてのデータアクセスオブジェクトへのアクセスを提供します。

ここで、私のWFアクティビティがメソッドAを呼び出し、メソッドAが別のクラスのメソッドBを呼び出し、さらに別のクラスのメソッドCendDを呼び出すとします。これらの各メソッドで、データアクセスファクトリの同じインスタンスを取得して、すべてのデータベース操作が同じデータベーストランザクションで実行されるようにします。データアクセスファクトリのシングルトンパターンをどのように設計しますか?メソッドA、B、C、およびDは、Asp.NetMVCコントローラーからも呼び出すことができることに注意してください。

メソッドA、B、C、およびDがasp.net mvcコントローラーから呼び出されると、簡単に、HttpContextを使用してデータアクセスファクトリシングルトンを格納できるため、1つのhttpリクエスト内でデータアクセスの同じインスタンスも取得できます工場。

ただし、これらのメソッドがワークフローアクティビティから呼び出される場合、もちろんHttpContextはありません。スレッドの静的変数を試しましたが、Webアプリケーションでは、メソッドA、B、CenDが同じスレッドで呼び出されるかどうかはわかりません。CallContextも試しましたが、経験したことですが、常に同じインスタンスを取得しているわけではないため、CallContextも解決策ではないようです。

基本的に、問題は「asp.netアプリケーションで実行されているバックグラウンドプロセスでオブジェクトの同じインスタンスを取得する」と要約できます(このバックグラウンドタスクがWFアクティビティまたは別のバックグラウンド方法によって開始されたかどうかは関係ありません)タスク(例:Task <T>を使用)

4

3 に答える 3

2

あなたの質問とはあまり関係ありませんが、asp.netアプリケーションでバックグラウンドタスクを実行するのはひどいです、私は経験から話します。

ASP.NETで繰り返しバックグラウンドタスクを実装することの危険性

于 2012-04-05T16:28:24.777 に答える
1

オブジェクトはプロセスとメモリスペースをクロスプロセスする必要があるため、ファクトリをシングルトンインスタンスとしてホストするWCFサービスを作成します。このようにして、MVCアプリケーションはそれを呼び出すことができ、WFアプリケーションはそれを呼び出すことができます。

于 2012-04-05T16:29:58.003 に答える
0

私はこれが古いことを知っていますが、これも役立つと思いました。

インターセプターでチェックすると、HttpContext.Currentはnullになります

ワークフローサービス(.xamlx)を実行するときに、エンティティオブジェクトでOperationContextを利用する必要があります。

于 2012-08-13T20:39:47.577 に答える