2

問題

異なるアプリケーション プールにある 2 つのワークフロー サービスに対する WCF 要求が、それぞれのワーカー プロセスによって処理されていません。代わりに、両方のワーカー プロセスが両方のワークフロー サービスの WCF 要求を処理しています。この問題は、「統合」マネージド パイプライン モードでのみ発生し、「クラシック」マネージド パイプライン モードでは発生しません。

設定

  • IIS 7.5 で実行される 2 つのワークフロー サービス (Workflow Foundation 4.0)。
  • 各ワークフロー サービスは、IIS でアプリケーションとしてセットアップされ、独自の ID 資格情報を持つ独自のアプリケーション プールを持ちます。
  • アプリケーション プールは、「統合された」マネージド パイプライン モードで実行されています。

説明

たとえば、ワークフロー サービス A ( WFSA ) と B ( WFSB ) がそれぞれUserAUserBの下で実行されているとします。どちらも、ワークフローの受信アクティビティを介した WCF 呼び出しを期待しています。

2 つのアプリケーション プールを開始すると、2 つの w3wp.exe ワーカー プロセスが実行されていることがわかります。1 つはUserAとして、もう 1 つはUserBとして実行されています。UserAの w3wp.exe ワーカー プロセスはWFSAのWCF 要求を処理し、 UserBの w3wp.exe ワーカー プロセスはWFSBの WCF 要求を処理する必要があります。

しかし、WCF メッセージをワークフローに送信し始めると、トレース ログ ファイルから、両方の w3wp.exe プロセスが両方のワークフロー サービスの要求を処理していることがわかります。

たとえば、WFSAの WCF メッセージは、 UserA AND UserBの w3wp.exe ワーカー プロセスによって処理されています。したがって、10 個の WCF メッセージをWFSAに送信すると、4 個はUserAの w3wp.exe によって処理され、6 個はUserBの w3wp.exe によって処理されます。

アプリケーション プールを "クラシック" マネージド パイプライン モードに切り替えると、期待どおりに、WCF メッセージがそれぞれのワーカー プロセスにルーティングされます。

不足している構成はありますか?

どんな助けでも大歓迎です。

アップデート

私が取り組んでいるプロジェクトでは、WFSAWFSB、および別の WCF サービス アプリケーション ( WCFApp ) が次の構成で相互に通信します。

WFSA <==> WFSB <==> WCFApp

次のシナリオで問題が発生します。

  • WFSA ==> WFSB ( UserA ): WFSAは、 UserAの w3wp.exe で処理されるWFSBで新しいワークフローをインスタンス化します。
  • WFSB ( UserA ) ==> WCFApp : WFSBは、何らかの処理を行うWCFAppを呼び出します。
  • WCFApp ==> WFSB ( UserB !!!): 処理後、WCFAppはWFSBに処理が完了したことを通知します。しかし、WCF メッセージはUserBの w3wp.exe プロセスによって処理されます!!! もちろん、ワークフロー インスタンスは存在しないため、次のメッセージでエラーが発生します。

要求されたリソースは、次のいずれかの場所に移動しました: http://server/AppFolder/WFSB.xamlx/INotifyWhenDone

次のように設定することで、これを回避できます。

<workflowIdle timeToUnload="00:00:00" />

これは、ワークフローがアイドル状態になるとすぐに永続化され、永続化データベースでワークフロー インスタンスを見つけることができるため、間違ったワーカー プロセスに送信されるメッセージを処理できることを意味します。ただし、永続性が非常に遅いため、このソリューションは受け入れられません。

4

2 に答える 2

1

AppFabricにはいくつかのホットフィックスがあり、そのうちの1つは発生している問題に関連しているようです。リンクについては、こちらをご覧ください。

于 2010-11-11T14:21:11.600 に答える
0

どちらのサービスも同じ「識別子」のようなものをIISに登録しているように感じますが、これは何であるかはわかりません(相関IDですか?)。したがって、メッセージは両方のサービスにルーティングされます。また、統合パイプラインには、サービスへの最適化されたパイプが1つだけあり、複数のサービスがそれに登録されているように感じます(これが私の以前のポイントにつながります)。

于 2010-11-11T09:33:15.247 に答える