6

.Net Winforms App.. をとり、フレークなワイヤレス ネットワーク接続で混合し、青色のプラグをときどき引き抜くのが好きな数人のユーザーとかき混ぜ、適切な措置として、警告なしに SQL サーバー ボックスを再起動することを決定したシステム管理者を追加します。時々、みんなを緊張させないようにしています。

に関して、この種のシナリオを処理するための提案と戦略は何ですか:

  • エラー処理 - たとえば、サーバーへのすべての呼び出しを Try/Catch でラップしますか、またはこれを管理するために何らかの形式の一般的なエラー処理に依存しますか? もしそうなら、それはどのように見えますか?

  • アプリケーション管理 - たとえば、アプリを無効にして、接続が再び検出されるまでユーザーが操作できないようにしますか? あなたならどうしますか?

4

6 に答える 6

3

答えは、アプリケーションの種類によって異なります。Microsoft Outlook など、オフラインで作業できるアプリケーションがあります。このようなアプリケーションは、接続の例外を重大なものとして扱わず、作業をローカルに保存して後で同期できます。オンライン ゲームなどの別のアプリケーションは、通信の問題を重大な例外として扱い、接続が失われると終了します。

エラー処理に関しては、一般的な例外処理コードに依存するのではなく、すべてのレイヤーで例外を制御する必要があると思います。ビジネス層は、下位層 (この場合はデータ アクセス層) で何が起こったのかを理解し、対応する必要があります。私の意見では、接続が失われたことを予期しない例外として扱うべきではありません。例外管理の優れたプラクティスについては、 Exception Handling Application Blockを参照することをお勧めします。

アプリケーションの動作に関しては、「私のアプリケーションは切断された状態の顧客にとってビジネス価値がありますか?」という質問に自分自身で答える必要があります。多くの場合、切断された状態で作業を継続できることは、エンド ユーザーにとって有益です。ただし、そのような動作を実装するのは非常に困難です。

特にあなたのシナリオでは、Microsoftは切断されたサービスエージェントアプリケーションブロックを開発しました

于 2008-09-08T10:59:27.007 に答える
2

私は何年も WinForms と .NET に触れていないので、技術的な詳細をお伝えすることはできませんが、全体像の答えは次のとおりです。

何よりもまず、フォーム データをデータベースに直接バインドしないでください。

フォーム ウィジェットをバインドする別のデータ/モデル レイヤーを作成します。

そこから、提供する必要がある安定性と可用性のレベルに応じて、いくつかのオプションを利用できます。

おそらく、ここでの最も簡単な解決策の 1 つは、接続状態に基づいてデータベースと対話する必要があるアプリケーションの部分を有効/無効にすることです。

次のレベルの保護には、データ モデルの一部をローカルにキャッシュし、データベース接続がダウンしている間にローカル キャッシュを使用して表示し、明示的なデータベース接続を必要とする機能を無効にすることが含まれます。

おそらく最も難しいこと (エンド ユーザーに最も安定したエクスペリエンスを提供する可能性もあります) は、データベースをローカルに複製し、ある種の同期スキーマを使用してデータベースのコピーをリモート db と同期させることです。

于 2008-09-08T10:47:23.153 に答える
1

これはオフライン シナリオのサポートが多すぎるかもしれませんが、「 Microsoft Sync Framework」について検討したことはありますか? フレームワークには「Sync Services for ADO.NET 2.0」が含まれており、アプリケーションがローカルの SQL Server CE インスタンスにヒットできるようになります。これは、さまざまな方法で中央の SQL Server と簡単に同期できます。

このフレームワークは永続的なオフライン シナリオを処理します。先ほど述べたように、特定の要件には適していない可能性がありますが、アプリケーションに確実なオフライン サポートを提供します。

于 2008-09-08T10:53:33.417 に答える
1

We have this in our Main() method which traps all unhandled exceptions...

Application.ThreadException += new 
System.Threading.ThreadExceptionEventHandler(UnhandledExceptionCatcher);

Thread.GetDomain().UnhandledException += new 
UnhandledExceptionEventHandler(Application_UnhandledException);

and then Application_UnhandledException and UnhandledExceptionCatcher display user friendly messages.

In addition the application then emails data such as the stack trace to the developers which can be very useful.

It depends on the app of course but for the kind of failures that you describe I would close the app down.

于 2008-09-08T10:35:17.003 に答える
0

SQLiteなどを使用して、接続が利用可能になるまでデータをオフラインで保存します。

更新: SQLite はGoogle Gearsのバックエンドであると思います。これは、私の理解では、Web アプリで探していることを実行します...ただし、Web 以外のコンテキストで使用できるかどうかはわかりません。

于 2008-09-08T11:14:25.367 に答える
0

In our application, we give the user the option to connect to another server, e.g., if the database connection fails, a dialog box displays saying that the server is unavailable, and they could input another IP address to try.

于 2008-09-08T10:30:48.620 に答える