3


0

私はVB.NET(コンパクトフレームワーク)でモバイルアプリケーションを構築しています、そして私はデバイス上の潜在的なオフラインのやりとりに近づくための最良の方法は何だろうと思っています。 基本的に、デバイスには携帯電話と802.11がありますが、それでもオフラインの場合があります(受信状況が悪い場合など)。 運転手がトラックを降りるときにボックスをスキャンするので、ネットワーク信号がある場合はすぐに新しい場所を更新します。オフラインで後で処理する場合はキューに入れます。 それでも、オフラインに対応する方法について一般的に考えることができました。

  • オフラインの場合に使用できるように、できるだけ多くのデータをデバイスにキャッシュしますか - 基本的に、各デバイスには(関連する)本番データのコピーがありますか? それとも、後で同期の頭痛を避けるために、オフラインのときに特定の機能を無効にする方が良いでしょうか。 私はこれが私のアプリに依存するかなり特定の質問であることを知っています、しかし私は他の人がこのルートを取ったかどうか見ることに興味があります。

  • 常にオフラインであるかのように動作し、ローカルクラスが所有する種類のローカルキューにすべてを送信し(基本的にオンライン/オフラインのものを抽象化し)、クラスに次のようにサーバーに送信させる。できる? データ検索についてはどうでしょうか。それらをどのように「半ライブ」方式で処理できるのでしょうか。

  • それとも、アプリケーションがサーバーに直接リアルタイムでリクエストを送信しようとし、それ自体がリクエストに失敗した場合はそれを処理する必要がありますか。 ユーザーにタイムアウトを待たせるという潜在的な問題がありますが、これが最も信頼できる方法ですか?

私は特定の解決策を探しているのではなく、開発者が可能な限りスムーズなユーザーエクスペリエンスでどのようにこれを達成するかについての話だけです。 これについてあなたの指針をありがとう!

3 Answer


2


すべての使用シナリオに適した「正しい」答えはないので、私たちはあなたに明確な答えを与えることはできません。 たとえば、バックエンドでSQL Serverを使用し、ローカルでSQL CEを使用している場合は、常にマージレプリケーションを設定し、データエンジンにこれらすべてを処理させることができます。 それはかなりきれいです。 オフラインアプリケーションブロックを使用すると解決する可能性があります。 ストア・アンド・フォワードを使用することはオプションかもしれません。

ローカルに保存してから、直接接続、ネットワークが検出されたときに使用されるWCFサービスのWebサービスを使用して独自の同期を実行できます。 あなたは配達のためにMSMQを使うことができました。

考慮しなければならないのは、「正しい」方法ではなく、実装がアプリケーションの使いやすさにどのように影響するかということです。 接続性がないために機能を無効にしても、アプリはまだ使用可能ですか? 古いデータがある場合、それは問題ですか? GSM / GPRS(通常は無料ではありません)を使用している場合は重要なデータを転送する必要があり、802.11を使用している場合はさらに多くのデータを転送する必要があります。 たぶんあなたは午前中に引き下げられたルックアップテーブルで一日中走ってトランザクションだけをアップロードすることができます。

基本的にそれは本当にそれが使われる方法、データの性質、フィールド化されたデバイス間のデータトランザクションの重要性、データ待ち時間の影響、そしておそらく私が手で考えることができない他の要因に依存します。

そのため、最初のステップは、アプリの使用方法を決定し、次に必要な接続性とデータアクセスを提供するためのインフラストラクチャとアーキテクチャを決定することです。


0


私はそれを自分で使ったことはありませんが、あなたはCFの "ストアアンドフォワード"機能を調べたことがありますか? それはあなたのニーズに合うかもしれません。 デバイスとの間でSOAPパケットを送受信するためのメッセージキューとしてExchangeメールボックスを使用していると思います。


0


これに対処する最善の方法は、常にオフラインで作業し、メッセージキューを使用してデバイスとの間で送受信される変更を処理することです。 たとえば、ドライバが何かを配達済みとしてマークした場合は、アイテムをローカルストアで配達済みとして更新し、メッセージを発信キューに入れて、サーバにその旨を伝えます。 接続が確立したら、キューに入っている項目をサーバーに送り返し、サーバーからキューに入っているメッセージをすべて受け取ります。