1

サービスを介して共有ポイント サイトにクエリを実行する必要があるアプリがあります。アプリは頻繁に使用されるため、パフォーマンスとスケーラビリティが私の優先事項の 2 つになります。

どのサービス アプローチが優れているかを調査し始めました。パフォーマンスの観点からは、クライアント オブジェクト モデルが公式に提案されているもののようですが、スケーラビリティに関しては、実際には Web サービスがクライアント オブジェクト モデルよりも強力であるように思われることが個人的にわかりました。これは、Web サービスがIO バウンド操作をサポートしていないクライアント オブジェクト モデルではなく、非同期サポートを持っているように見えるためです。Stephen Toubが言ったように、同期メソッドを非同期的に呼び出す機能はスケーラビリティには何の役にも立ちません。

サーバーでクエリが実行されたときにスレッドをスレッド プールに戻すために、アプリで C# 5 の async/await 機能を使用していることに言及する必要があります。

私の質問は、決定を下すために何を重視すべきかということです。

編集:私は Silverlight CSOM を使用していないことに言及する価値があります。より一般的な .NET を使用しています。

4

2 に答える 2

0

実際、クライアント オブジェクト モデルは、非同期アクセスを提供するだけでなく、非同期アクセスを必要とする場合もあります。データ取得の概要で詳細を確認できますが、短いバージョンは次のとおりです。

  1. 次に、ClientRuntimeContext で 1 つ以上のクエリを作成してロードします。
  2. 読み込まれたすべてのクエリをClientRuntimeContext.ExecuteQueryと同期的に実行するか、成功または失敗の 2 つのコールバックを使用してClientRuntimeContext.ExecuteQueryAsyncと非同期的に実行します。

どこでも BeginInvoke を使用する必要はありません。

実際、Silverlight の Client オブジェクト モデルは Async メソッドのみを提供します。この場合、呼び出しを非同期で実行する必要があります。

構文は変わっていますが、クライアント オブジェクト モデルは .NET 3.5 と Silverlight を対象としているため、タスク ベースのインターフェイスを提供することはできませんでした。コールバックは Begin/End パターンよりもいくらか単純であり、完了イベントを発生させるよりも確実に優れていると主張することさえできます。

編集

@alexb が気付いたように、ExecuteQueryAsync は Silverlight でのみ使用できます。ただし、非同期で動作する方法は他にもあります。

SharePoint の OData サポートを利用して、WCF Data Services を使用してリストをクエリできます。クエリのシナリオは少し似ています。クエリを送信し、結果が返ってきたらコールバックを待ちます。その間に、非同期クエリを表す DataServiceQuery オブジェクトにアクセスできます。

この方法は REST/Json を使用するため、Web サービスよりも通信量が少なくなります。LINQ と ORM のような API は、Web サービスに比べて操作も簡単です。

Sharepoint のサポートについては、「 ADO.NET Data Services を使用して SharePoint Foundation にクエリを実行する」で説明されており、非同期クエリについては、「方法: 非同期データ サービス クエリを実行する (WCF Data Services)」で説明されています。

于 2013-07-25T13:34:36.180 に答える