1

WCFサービスによってサーバーと通信するSilverlight5アプリケーションがあります。

アプリケーションを使用するほとんどのユーザーは、ブラウザー内でアプリケーションを実行しており(ほとんどの場合、Internet Explorerが使用されますが、他のブラウザーも使用されます)、OOB(ブラウザー外)をインストールするユーザーもいます。

アプリケーションが起動すると、新しいバージョンをチェックし、必要に応じてアップグレードします。ここでは異常なことは何もありません。

時々、主に夕方と週末に、ソリューションのアップグレードを行います。これは、データベースの変更、WCFサービスの変更、Silverlightアプリケーション自体の変更、またはそれらすべての組み合わせである可能性があります。そして、ほとんどの場合、それはまったく問題ありません。

私の問題は、一部のユーザーがWebブラウザを閉じないことです。一部のユーザーは、Citrixウィンドウを介して作業し、Citrixウィンドウを閉じて作業後に帰宅するだけで、Silverlightアプリケーションを実行してWebブラウザーに存在させることができます。また、ブラウザをまったく閉じないものもあります。または、OOBを実行している場合は、アプリケーションを開いたままにします。それらが私の問題です。彼らは新しいアップデートをチェックすることは決してないからです。Silverlightアプリケーションはアップグレードされることはなく、アップグレードされる可能性のある新しいWCFサービスにも適合しません。

それはすべて、周りの世界が変わったために、Silverlightアプリケーションをクラッシュさせ、奇妙な例外をスローさせます。

誰かが同様の問題を抱えていて、実際に良い解決策を見つけましたか?

私が試してみました:

  • キーボードまたはマウスのクリックでリセットされ、アクティビティがない状態で一定時間後にアプリケーションを終了するタイマーを作成します。ただし、RDPまたはCitrixセッションから接続されている場合のように、このタイマーがカウントされない場合があるようです。

  • 特定のコントロールまたはウィンドウが表示されるたびに更新を確認します。しかし、すべてのユーザーが同じものを使用するとは限らないため、これは良い解決策ではありません。また、ユーザーが何かを操作している場合は、ユーザーに割り込む可能性があります。

しかし、それらはすべて、少し厄介な回避策のように私には思えます。

何か提案はありますか?

4

1 に答える 1

0

ユーザーがアクティブなときにタイマーを再起動しても、私には意味がありません。アップデートがリリースされたときにアクティブだった場合はどうなりますか?確かに、アプリが倒れるよりも中断する方が良いですか?

一定の間隔でタイマーを実行することをお勧めします。CheckAndDownloadUpdateAsync再起動が必要な場合は、ユーザーに電話してプロンプトを表示します。

タイマーが実行されない、または重要な更新が間隔の間に公開されるフリンジケースの場合、メソッドで更新ロジックを実行してみることができますApp.Application_UnhandledException。インストールする更新が実際にあることがわかった場合は、イベントを処理済みとしてマークすることを忘れないでください...

このようにして、完全にカバーする必要があります。


編集:ブラウザ内アプリケーションの場合、ページを更新するタイミングについてのみ心配する必要があります。これは、XAPが最新であることを確認するのに十分な場合があるためです。

タイマーでJavaScriptApp.Application_UnhandledExceptionを呼び出してこれを実現することもできますが、イベントで更新をトリガーするだけの方がよいと思います。これを本当にシームレスにしたい場合は、事前にIsolatedStorageに状態を書き込むことができます。

于 2013-01-30T20:38:01.687 に答える