2012-06-11 17 views
5

弊社には、米国およびカナダの各地で、あらゆる壊滅的なイベントの人々がいます。一例は、イベントの直後にカトリーナでかなり流行していたことです。アプリケーションの開かれていない展開のためのアプローチ

私たちは、ASP.NETまたはWPFのいずれかのフィールドで自分の仕事を改善するためのアプリケーションを構築しています。切断要求によって、WPFアプリケーションになると思われます。私たちの人々は、インターネットを利用できるかどうかにかかわらず、雇用を創出し、すべての保険および測定データを提供し、データベースに保存する必要があります。

私たちが頭を悩ませる問題は、壊滅的な出来事でインターネットが利用できない場合でも、私たちの新しいアプリケーションを使用できるようにする必要があるということです。 (彼らはカトリーナで3日間オフラインでした)

他の誰も、小さなフットプリントデバイスでの機能にどのように近づいてきたのか、データがまだバックエンドのサービスやデータベースに接続されているかのように?また、セキュリティにもセキュリティを組み込む必要があります。入力したデータが問題なく接続されたデータベースに読み込まれるように十分な処理を施す必要があります。

私たちの長期的な目標は、AndroidおよびIPadタブレットデバイスとラップトップにもこのアプリケーションを提供することです。私たちのASP.NETへの最初の要望は、タブレット環境のための即座のアプリケーションを私たちに与えたということでした。古いアプリケーションでは、ローカルサーバーを実行し、タブレット上でリモート接続を実行し、ターミナルサーバー経由でアプリケーションを実行します。綺麗ではない。綺麗ではない。

私はこれが主観的ではない深刻な問題だと感じていますので、うまくいけば削除されません。

サーバー側の現在のアーキテクチャは、リポジトリパターンを持つEntity Framework、複合データ転送オブジェクトを返すCRUD要求を満たすWCFサービス、およびクライアントが使用するためのプロキシです。

他の開発者の意見やこのデザインパズルを聞くことに興味があります。ディスカッションに

追加情報を追加しましたが良い情報の

たくさん提供します!私は確かにMicrosoft Syncを見なければならないだろう。接続されていないデータベースの場合は、初期データベースにリストテーブル(列挙型)のみを配置します。私たちが手がけているクライアントごとに、仕事と必要に応じて乾いた本と呼ばれるアイテムが追加されます。 (ただし、私たちが家を掃除して乾燥させるまでにインターネットが戻ってくることを願っていますが)これは、安定したリンクがあればホストに戻ってくるテーブルです。カトリーナの場合、私たちはオフィスでもインターネット接続を失いました。それは、オフィスで何日もコミュニケーションの救済ができなかったことを意味しました。

昨夜私は、クライアントプロキシがすべての作業の鍵であることに気付きました!クライアントは、オンラインまたはオフラインであることを認識せずに、そのライブラリ内で同期処理を行います。今日私たちがどのくらいのデータを話しているかを発見しています。また、ASP.NETが好きだが、厚いクライアント(実際にはXAMLを使用するWPF)が終了状態になる可能性があることを明確にしたい。

今 - 複数の更新です。切断された作業は、単一のフランチャイズによって個々の家に行きます。事実、私たちのホームオフィスは特定のフランチャイズを特定のイベントに派遣します。だから、複数の人がレコードを更新するという問題の可能性が低くなります。その理由は、各職場(個人の家庭/オフィス/ビジネス)の記録を作成しており、その1つのフランチャイズだけがそれを処理するためです。もちろん、これはまた、ジョブを作成するデバイス(誰、どこで、条件、保険会社などの記録)も、仕事を知っている唯一のデバイスであることが数日間切断された場合にも意味します。しかし、それはと一緒に暮らすことができます。実際には、フランチャイズデバイスをハブ上で同期させる機能を持つことができます。

私は、あなたの接続されていない環境をどのように実装したのかという追加の話を聞くことを楽しみにしています。

ありがとうございました!

マイクロソフトから新技術を見てみると、私は開催されたTechEd 2012からの映像を見て監督と私は答えを持っているかもしれないと思いました。この話は、ASP.NETとMVC4を使用して、2つのライブラリを使用して切断された動作になっていました。最初は凄かったと思っていましたが、それが続きましたので、かなり心配していました。

最初に、切断されたI/Oをサポートするためのjavascriptバックエンドを使用しても、信頼性が生成されません。コンパイラの人(そして2つの解釈言語を書いた人)として、私は解釈的なJavaScriptに頼るクリティカルなビジネスモデルを持つのは本当に好きではありません。そしてそのスクリプト!それは私かもしれませんが、それだけで私は震えます。

次に、あなたのViewModelをジャバスクリプトとして持つ「素晴らしい」(???)プログラミングモデルを示します。私はメモ帳に書かれているアプリケーション(asp.netとjavascript)を気にしません。

いいえ、恋人には意味がありませんが、文法的にタイプチェックされたよく書かれたC#プログラムは、クラスネームスペースが適切にタイプされていないという希望と祈りで書かれたものよりも、クロスチェックの私はデバッグの時間が非常に長くなっています。バグを発見したのは、名前が変わった巨大な名前空間になってしまいました。私は私のグループの他の上級ディベロッパーよりも自分の考えを走らせました。私たちは皆、この技術についてコンセンサスを得ています。

しかし、私たちは引き続き見ています。 (私は、これは質問より日記のよりとなってきている感じ):)

+0

これは、asp.netアプリケーションでなければならない理由があります。スタンドアロンではなく、定期的にアクティビティをポーリングして、マスターデーセットとの遅延同期をとることができますか? – devshorts

+0

これの鍵は、Webサービスのようなものを使うことです。あなたは、このアプリを実行する必要があるかもしれない多くのデバイスをサポートするために様々な技術の味を使用しますが、1つのことは、デバイスとあなたのWebサービスとなるサーバー間の通信ゲートウェイです。各クライアントは、sql liteのようなローカルデータベースを持つことができます。アプリはいくつかの標準的な同期技術を使って変更をポーリングします。しかし、各デバイスは、最後の同期日からWebサービスからの「最新の」変更を取得し、WebサービスのさまざまなWebメソッドを使用して関連する変更を追加または変更します。 – Jeremy

+1

どのようにデータを保存していますか? SQLサーバー? –

答えて

2

のMicrosoft Sync Frameworkの

http://msdn.microsoft.com/en-us/sync/bb736753.aspx

コラボレーションを可能にする包括的な同期プラットフォームのための完璧な例のように見える 任意のデータタイプ、すべてのデータストア、転送プロトコル、および任意のネットワークトポロジをサポートする のアプリケーション、サービス、およびデバイスのオフラインアクセスをサポートします。

+0

私は基本的なドキュメントを読みました。 SynchはWebサーバー経由であり、ポート1433を開く必要はありませんか? – Paparazzi

+0

SQL Serverポート1433またはWCF(80,443、またはWCF設定で指定したもの)を使用できます。シンクフレームワークは、実際には転送メディアには不可知論的です。 –

1

私の特定のニーズに合うように軽量フレームワークを構築することは、既存のものを使用するよりも私にとって有益です。しかし、いつも利用可能なものを見て、その決定を下す前に長所と短所を評価してください。

私はMicrosoft Sync Frameworkを使用していませんが、これは最初に調べるのに適しているようです。 Sql Server Standard(またはExpressバージョン以外の他のバージョン)を使用している場合は、レプリケーションもオプションになる可能性があります。

独自の自社開発ソリューションを開発する場合は、lastupdatedフィールドとdateaddedフィールドを同期しておく必要があるテーブルに配置してください。あなたのシナリオが並行性の問題(つまり、AとBの両方が同じ時間にフィールドを変更した場合、誰が勝つのか)によって負担をかけるようなことはありません。その場合、独自の軽量ソリューションを開発することは簡単です。

ジェレミーが指摘したように、変更を加える方法が必要です。 Webサービスを使用することに加えて、Webサービスに類似したWCFをいくつかの方法で使用することもできます。しかし、私の個人的な偏見は、インターネット経由でリモートからSQLサーバーにアクセスすることになります。このソリューションの欠点は、セキュリティ上の懸念が増し、開発のオーバーヘッドが減少することです(開発の迅速化/容易化、時間の経過によるメンテナンスの減少)。また、直接SQLソリューションは、これが内部アプリケーションであると仮定しています。あなたはすべての開発を担当しており、データにアクセスする必要があり、このようにアクセスすることを許可されていない第三者とは連携していません。

1

本当に完全な回答ではありませんが、コメントには多すぎます。

私は一方向と他の2つの方法で同期する2つのアプリケーションを持っています。

私は、切断された操作のためにクライアントに対して一方向の同期を行います。サーバーの完全なSQL Serverとクライアントのコンパクトエディション。 TimeStampは、同期する必要のある行を見つけるための場所です。私はまた、最大のテーブルの一部が非本質ではないので、データベース全体をコピーしません。よく使われるのは、ユーザーが同期させたいと思っている特定のレコードをマークすることです。

もしあなたが必要とするものがJakubのために必要なものを行うならば。私にとっては、サイズとセキュリティの両方に基づいてMSSQL全体を同期させるオプションはありません。

2つの方法で同期する別の小さなアプリケーションがありますが、この場合はリージョンがあり、更新はリージョン内にのみあります。したがって、リージョンはデータの同期のみを行い、切断モードでは新しいレコードの追加のみが可能です。既存のレコードへの更新は、接続モードで実行する必要があります。それは大惨事だった。その場合、マスタ用のMSSQLとクライアント用のXMLを使用します。

あなたにはニュースはありませんが、生の同期の難しい部分は、2人の当事者が同じレコードを追加または改訂した可能性があるということです。

+1

Microsoft Sync Frameworkはデータベース全体のみを同期しません。特定のテーブルと特定のレコードのみをテーブルから同期することができます。また、競合の管理にも役立ちます。 –

+0

@JakubKoneckiもう一度Sync Frameworkを見ていきます。私はすでにあなたに+1を与えていました。 – Paparazzi

関連する問題