0

「購読」と「購読解除」の受信アクティビティを設定しようとしているWFサービスがあります。私のサービスはクライアントへのコールバックを実行するため、このWFDurableDuplexチュートリアルをベースとして使用しています。基本的にはチャットサービスと考えてください。

2つの受信アクティビティへのクライアント呼び出しは問題なく行うことができます。クライアントのコールバックアドレスがサービスのSubscribe()に渡されます。アドレスはWFサービスに変数として格納され、すべてが期待どおりに機能するように見えます。

クライアントがUnsubscribe()を呼び出すと、デバッグ中にアドレスvarに設定した時計はそれをとして表示しnullます。では、何が得られるのでしょうか?

これが私のWFサービスレイアウトの基本的なセットアップです...

すべてがDoWhileアクティビティに包まれています。その中には、Pickアクティビティと2つのPickブランチがあります。最初のブランチは、アクティビティをサブスクライブするためのものです。クライアントから渡された文字列をWFアドレス変数に割り当てるreceive-sendreplyアクティビティがあります。2番目のブランチは、サブスクライブ解除を処理します。トリガーはリクエストアクティビティであり、クライアントアドレスが再び渡されます。

そこから、Ifで始まるシーケンスに入ります。すでにサブスクライブされているunsubscribeAddressものと等しいかどうかを確認します。address含まれている場合は、に設定しaddressString.Empty成功メッセージをクライアントに送り返します。

エンベロープするDoWhileアクティビティにスコープされた変数が、暗黙的にnullに割り当てられるのはなぜですか?これを機能させて、そこから複数のクライアントサブスクライバーを実装し、複数のクライアントへのコールバックを呼び出すトリガーを処理できるようにしようとしています。

CONCAT EDIT: DoWhileレベルでブレークポイントを設定しましたが、呼び出されるとvarはnullになりますUnsubscribe()。がSubscribe()呼び出されると、ウォッチはvarの値を最後まで表示します。Unsubscribe()私がクライアントと一緒になるまで。代わりにWhileアクティビティを使用する必要がありますか?

4

3 に答える 3

1

ワークフローを見ずに推測することはできませんが、探しているのは次のとおりです。

  1. 変数のスコープは、DoWhileアクティビティ内にあるシーケンスまたは何かですか?ところで、Whileアクティビティに変更してもメリットはありませんが、唯一の違いは、条件が最初または最後にテストされることです。
  2. 変数は別の場所で使用され、その方法でクリアされていますか?名前を変更して、何が得られるかを確認してください。
  3. プレイに永続性があり、持続しないタイプですか>ストリングまたはウリのいずれかであると思いますが、どちらも問題ないはずです。
  4. 相関関係に問題があり、購読解除メッセージが別のワークフローで処理されていますか?CanCreateInstanceがfalseに設定されていることを確認してください。
于 2010-06-17T19:30:29.443 に答える
0

クラススコープをプライベートにするようにしてください{get; set;}そして、問題がまだ頭に浮かぶかどうかを確認します。これは、実際のソースコードを見ずにできる最善の方法です。あなたが説明した内容から、問題はわかりません。

于 2010-06-17T18:53:15.163 に答える
0

うわー、怖いものですね。以前にxamlxファイルを手動で編集する必要があり、SendReplyToReceive用に編集した参照は、アクティビティデザイナーに戻ったときに面白く保存されました。2つあるように見えたUnsubscribe()だけでなく、各ブランチの相関ハンドルがブランチ間で交差していました。

これですべての準備が整いました。この問題を修正するために、すべてのメッセージングアクティビティを削除し、新しいReceiveAndSendReplyアクティビティをブランチ1のアクションブロックにドロップしました。次に、Receiveアクティビティをブランチ1のトリガーにドラッグし、以前と同じように構成しました。ブランチ2についても同じことを行いましたが、一致するアドレスを検証するIfアクティビティの下にSendReplyToReceiveアクティビティを配置しました。

于 2010-06-17T19:26:45.483 に答える