私が現在取り組んでいるアプリは、ローカル ネットワーク上のデータベースに接続する Entity Framework 4 を使用しています。このデータベースを別の場所にあるサーバーでホストする必要があります。明らかに、クライアント アプリ (Windows フォーム) は引き続きデータにアクセスする必要があります。VPN を使用するのが最も簡単ですが、この場合、それはオプションではありません。そうは言っても、私のオプションは何ですか?クライアント アプリケーションの再作業を最小限に抑える必要がある Web サービスを介してエンティティ データ モデルを公開する方法はありますか?
2 に答える
要するに; IQueryable
WCF サービスを見てください。ただし、サービスを介して公開またはIEnumerable
インスタンス化しないようにしてください。
おそらくビール関連の長いとりとめのないバージョン:
アプリケーション アーキテクチャの詳細を知らなければ、具体的な答えを出すのは困難です。
既存のアプリ内の多数のサービス クラスでアプリケーションを構築した場合、これらのサービスを Web サービスの何らかの形式で直接公開できる場合があります。IQueryable
ただし、サービス境界のインスタンスを渡したりIEnumerable
、サービス境界を越えたりした場合は注意が必要です。Web サービスへの移植により、大量のデータやネットワークを介したデータの受け渡しが発生したり、N+1 の問題が発生したりして、アプリが非常に「おしゃべり」になり始めることがあります。
別の方法として、制限されたユーザーでユーザーにデータベースへの直接アクセスを許可することもできます。特にこれが公的なアプリケーションである場合、これは常に私が神経質になっていることです。この場合、付与する sql ユーザーが、回避できる最小限のアクセス許可を持っていることを確認する必要があります。
また、ローカル ネットワークから移動すると、データベースと通信する際の待機時間が大幅に長くなることにも注意する必要があります。アプリのコーディング方法によっては、ネットワーク ラウンド トリップが発生している間に UI がロックしたりハングしたりすることがあります。
データベースへのアクセスをサービスに分割することから始めるためにアプリを適切にコーディングした場合、少なくとも注意が必要です (アプリが非常に単純でない限り)。
WCF データ サービスの調査: http://msdn.microsoft.com/en-us/library/cc668794.aspx
これをざっと読んで、EF のラッパー サービスを簡単にセットアップできることを理解してください。http://blogs.msdn.com/b/adonet/archive/2011/03/21/using-wcf-data-services-with-entity-framework-4-1-and-code-first.aspx