社内の.netアプリケーションが場所とバージョンを発表するための優れたブロードキャストメカニズムですか?
-
10-07-2019 - |
質問
多数の社内.netアプリケーションに、それらが使用されていることを知らせる簡単な方法を提供したいと思います。私の目標は、どのユーザーがサポートチェックインやアップグレードのリマインダーの恩恵を受ける可能性があるかを追跡することです。
これは社内ネットワーク上にあります。すべてのマシン間で間違いなくIP接続があり、おそらくUDPがあります。 (ただし、おそらくマルチキャストではありません。)
既知の社内共有への書き込みまたは既知のURLの読み込みは可能ですが、信頼性を犠牲にしても、アプリケーション自体への影響を可能な限り最小限に抑えたいと思います。そのため、タイムアウトのリスクを避けたい(たとえば、集中化されたリソースにアクセスしているときに消えてしまった場合)、理想的にはワーカースレッドも起動しないのが理想です。
複数のリスナーを許可することも良いでしょう。これは、サービスを呼び出すのではなくブロードキャストを考えているもう1つの理由です。
このために安全かつ効果的に使用できる、火災と忘却のブロードキャストメカニズムがありますか?
解決
これには確かに多くのオプションがありますが、実装が非常に簡単で、基準を満たすものは非同期Webサービスの呼び出し。
これは、ワーカースレッドを開始する必要はありません(フレームワークはバックグラウンドでそれを行います)。そのリンクで説明されているオプションのいずれかを使用して結果を取得するのではなく、呼び出し元のアプリにとって意味がないため、結果を単に無視します。
他のヒント
「ブラッドキャスト」ではありませんが、似たようなことをしました
私は、社内のいくつかの非技術者が社内で使用するツールを持っています。特定のEXE(使用したい場合にダウンロードするのと同じEXE)のネットワーク共有をチェックし、そのファイルのバージョン番号を実行中のアセンブリと比較します。ネットワーク上のものが新しい場合は、新しいものをダウンロードするようユーザーに警告します。
私と同じ建物内でのみ使用されるものの自動アップデータを設定するよりもはるかに簡単です。
アップグレードが問題にならない場合(つまり、古いバージョンを使用したほうが良い場合はありません)、同様のことで私がしたことを行うことができます:
人々が実際に起動するアプリケーションはアップデータプログラムであり、ネットワーク共有のファイルバージョンとタイムスタンプをチェックし、新しいバージョンが存在する場合はプログラムディレクトリにコピーします。その後、プログラムを実行します(更新されたかどうかに関係なく)。
var current = new FileInfo(local);
var latest = new FileInfo(remote);
if (!current.Exists)
latest.CopyTo(local);
var currentVersion = FileVersionInfo.GetVersionInfo(local);
var latestVersion = FileVersionInfo.GetVersionInfo(remote);
if (latest.CreationTime > current.CreationTime || latestVersion.FileVersion != currentVersion.FileVersion)
latest.CopyTo(local, true);
Process.Start(local)
また、プログラム自体にアップデーターの更新が必要かどうかを確認させます(ファイルのロックのためにアップデーターはそれ自体を更新できないため)