2012-04-19 5 views
4

私はデータベースとしてSQL Serverを使用してローカルネットワーク上で使用されるデスクトップアプリケーションを構築しています。WPFとMVVMでSQL Serverからデータを取得するためにWCFを使用することをお勧めしますか?

このアプリケーションでは、同時に約50人のユーザーがトップになります。どのようなシナリオでWCFサービスを使用する必要がありますか?データベースに直接接続するのではなく、WCFサービスを通じてこのサーバーに接続するように、データベースが存在するサーバーコンピュータにWCFサービスを作成することをお勧めしますか? SQL Serverのデータに接続するための推奨方法とその理由は何ですか?

を詳しく説明します。以前はWCF Riaサービスを使用していたので、どのように動作するのか分かりました。 WCFサービスは同じように動作すると仮定します。問題は、なぜデータベースに直接接続するのではなく、WCFを使用するのかということに向けられたのですか?特定の要件について具体的な回答が得られるので、現在のアプリケーション要件を指定したくありませんでした。私の目標は、なぜ、いつ、どういうときにあなたが他のものを使うのかを理解することでした。そして私はこれまでに満足のいく答えを受けてきました。

一般的なコンセンサスは、サービスからデータを取得するためにWebアクセスを使用する別のタイプのアプリケーションの需要がある場合にのみ、WCFを使用することです。また、私が正しく理解していれば、セキュリティの観点からは、両者に違いはありません。

今後はWebを使用してユーザーに読み取り専用の統計情報を提供する統計的なアプリケーションがありますが、当然ながらこのタスクにはサービスが必要です(アプリケーションには特定のクライアントがないので、クライアントの)。私はいくつかのデモアプリケーションが特定のクライアントのために非常に迅速に行われる必要があるので、サービス部分を無視し、適切なレイヤーを作ることを考えています(WPF-> VM-> Model-> EF、モデルやEFを使っているのですが、挿入されたレイヤーでWPFアプリケーションを実行するにはあまり時間をかけてはいけないと思うのですが、次の理由からサービスを延期しています。 SLが技術として放棄される可能性(論理的には、SL上のHTML5を選択することになります)しかし、私はHTML5とその要件に全く慣れていないので、WCFサービスが最高のものかどうかはわかりませんこれは、サービスタイプの選択の決定を延期する理由の1つです(デスクトップデモアプリをできるだけ早く作成する必要があります)

+2

なぜデータベースに接続するだけではないのですか? WCFを使用する理由も_consider_ですか? –

+0

これは実際に私の質問です。 :)私はWCFが必要ですか、それとも十分ですか? WCFを使用するか、データベースに直接接続するのがより一般的なシナリオですか?賛否両論は何ですか?推奨される他のオプションがありますか? – Goran

+0

WASが必要ですか? WFはどうですか?あなたはWIFを試してみるべきでしょうか? –

答えて

3

私は、サービスインタフェースを使用してアプリケーションからデータベースとデータアクセス層を抽象化する必要があるかどうかということを考慮するとよいでしょう。 WCFとSOAPを使用することができます。また、RESTベースのHTTPサービスを使用することもできます。アプリケーションの現在または将来の要件によって、抽象レイヤーが追加されていることが示されているかどうかは、あなたが、それらに限定されないが、サービス・インターフェースを使用しての代わりに、直接SQLデータベースへの接続を検討してください

理由:データを進化させる

  • サポートする複数のオペレーティングシステム/クライアントの使いやすさのUI
  • 能力/サービスインターフェイスをデータベーススキーマとは別に
  • データベーススキーマまたは場所の変更からアプリケーションを分離する(アプリケーションに変更を再デプロイする必要はなく、呼び出すサービスの内部のみを変更する)
  • 他のシステムでデータを使用できる場合は、アプリケーションが管理しているデータとこれらのシステムとのインターフェイスを可能にする標準的な方法があります。
  • SQLデータベース接続のセキュリティ上の懸念が軽減されました。

あなたが見ているトレードオフは、サービスインターフェイスの実装の時間/コスト/複雑さと、得られる柔軟性とマテインナビリティの利点です。 ADO.NETを使用してデータストアに直接接続するかサービスレイヤを使用するかを決定する前に、アプリケーションとお客様のニーズを評価する必要があります。

Microsoft Service Layer Guidelinesを考慮する必要があります。

+0

DALからUIレイヤを分離するには、ORMツールを使用します。これにより、説明したすべての利点が、アプリケーションサービスレイヤーを介さずに導入されます。 Webサービスをどこかにホストする必要があることを覚えておいてください。また、これらのWebサービスも必要とするアプリケーションのWebサイドを持っていない限り、簡単な作業ではありません。また、WCFがRESTを完全にサポートしているので、WCFまたはRESTを書く理由はわかりません。 –

2

Unles再利用可能なサービスを作成する必要がある場合、WCFレイヤを追加する理由は考えられません。私は、EFやnHibernateのようなORMのいくつかの並べ替えと幸せになることができると思う。

1

WCFの主な理由はセキュリティです。クライアントがDBに直接接続する場合、クライアントにはテーブルに対する権限が与えられなければなりません。クライアントは接続をハックしてTSQLを直接使用できます。単一のティアアプリケーションでポート1433をネットワークに公開する必要があります。 WCFでは、クライアントからSQLへの直接アクセスはありません。これは一般的には安全ではありませんが、より細分化されたセキュリティを持つことができます。 .NETサービスコードで行レベルのセキュリティを強化できます。表には列レベルのセキュリティしかありません。これがプライベートネットワーク上のビジネスで、誰かがあなたのデータベースをハックしようとしているとは思わないなら、SQLサーバに直接接続するクライアントは簡単に構築できます。サーバー側のサービスでは、もう1つの要因はサーバー側のコードへの変更であり、50個のデバイスを更新する必要はありません。

+0

-1:ナンセンス。特定のビューやストアドプロシージャにのみアクセスできるようにすることも可能です。 –

+0

@JohnSaunders目を覚ます。ポート1433をオープンすると、全体的にセキュリティが異なることになります。行レベルで保護するビューまたはストアドプロシージャを表示します。 – Paparazzi

+0

まず、「テーブルに対する権利」の引数がfalseであることに同意する場合は、答えを編集して削除する必要があります。第二に、誰もカラムレベルのセキュリティについては何も言わなかった(Viewsはそれを得る)。最後に、「クライアントはTSQLを直接使用できますか?クライアントはハッキングなしでこれを行うことができます。誰かがデータベースを使用しているかどうかにかかわらず、データベースが安全であることを保証するのはDBAの責任です。 –