なぜ私のワークフローサービス(4.0)変数がダウハイルアクティビティでヌルになるのですか?
-
28-09-2019 - |
質問
「サブスクライブ」および「登録解除」するためのアクティビティを受信しようとしているWFサービスがあります。私は使用しています このWF耐久性のある二重チュートリアル 私のサービスがクライアントにコールバックを実行するため、根拠として。基本的に、それをチャットサービスと考えてください。
私は2人のクライアントに電話をかけ、アクティビティを正常に受け取ることができます。何が起こるかは、クライアントのコールバックアドレスがサービスでsubscribe()に渡されることです。アドレスはWFサービスの変数として保存され、すべてが予想されるように機能するように見えます。
クライアントがunsubscribe()を呼び出すと、デバッグ中にアドレスに設定した私の時計はそれを示しています null
. 。では、何が与えるのでしょうか?
これが私のWFサービスレイアウトの基本的なセットアップです...
すべてがダウハイルアクティビティに包まれています。その中にはピックアクティビティと2つのピックブランチがあります。最初のブランチは、購読アクティビティ用です。クライアントによって渡された文字列をWFアドレスVARに割り当てる受信センドレプリーアクティビティがあります。 2番目のブランチは、登録解除を処理します。トリガーはリクエストアクティビティであり、クライアントアドレスが再び渡されます。
そこから、IFから始めて、シーケンスになります。それは、を確認するためにチェックします unsubscribeAddress
等しい address
すでに購読されています。もしそうなら、それはを設定します address
に String.Empty
そして、クライアントに成功メッセージを送り返します。
包み込むダウハイルアクティビティにスコープされた変数が、暗黙的にnullに割り当てられるのはなぜですか?私はこれを機能させようとしているので、そこから複数のクライアントサブスクライバーを実装し、複数のクライアントにコールバックを呼び出すトリガーに取り組むことができます。
concat編集: 私はダウハイルレベルでブレークポイントを設定し、私のvarは一度nullです Unsubscribe()
呼ばれています。いつ Subscribe()
呼び出されると、時計はVARの値をずっと示しています。私まで Unsubscribe()
クライアントと。代わりにしばらくのアクティビティを使用する必要がありますか?
解決 3
うわー、OK怖いもの。以前にXamlxファイルを手動で編集する必要がありましたが、アクティビティデザイナーに切り替えたときに、SendReplyToreceiveのために編集した参照がおかしくなりました。それは私が2つ持っているように見えました Unsubscribe()
それだけでなく、各ブランチの相関ハンドルが枝を横断していました。
私は今すべて設定されています。問題を修正するために、私はすべてのメッセージングアクティビティを削除しました、新しいでドロップしました ReceiveAndSendReply
ブランチ1のアクションブロックへのアクティビティ。次に、受信アクティビティをブランチ1のトリガーにドラッグし、以前と同じように構成しました。私はブランチ2についても同じことをしましたが、一致するアドレスを検証するアクティビティの下にsendreplytoreceiveアクティビティを配置しました。
他のヒント
ワークフローを見ることなく、私はいくつかの推測をすることしかできませんが、私が探すことは次のとおりです。
- 変数は、シーケンスまたはダウハイルアクティビティの内部にあるものに閉じ込められていますか?ところで、それをしばらくのアクティビティに変更する利点はありません。唯一の違いは、条件が最初または最後にテストされることです。
- 他の場所で使用され、そのようにクリアされた変数です。名前を変更してみて、何が得られるかを確認してください。
- 遊びに執persitenceはありますか、そして持続しないタイプです>私はその文字列またはURIのいずれかであると仮定し、両方が行くべきだと思います。
- 相関関係に問題はありますか?また、登録解除メッセージは別のワークフローによって処理されていますか?マーレは、CancreateinStanceが偽に設定されていることを確認してください。
クラスをスコープしたプライベートを作成してみてください{get; set;}そして、問題がまだ頭を育てているかどうかを確認します。それは、あなたが説明したものから問題が見られないので、実際のソースコードを見ずに私ができる最善のことです。