0

問題: Silverlight アプリケーションで作業していて、大量のデータを DomainContext に、つまり Web サービスからロードしています。現在のクエリを表示する BusyIndi​​cator を使用して、いくつかの異なるクエリの実行を開始しますが、データが最も多いクエリに到達するとフリーズします。数分後、サーバーが次のクエリに応答しないと表示されます。

デバッグ/試みられた解決策: ロードするデータが少ないと、システムは機能します。タイムアウトになったと思います。そのため、次のクエリが存在しない、つまり、Web サービスに接続することさえできないと表示されます。しばらく見回したところ、人々はタイムアウトと最大結果サイズを増やすことを提案しました。これらは他の問題を解決したので、それらが機能すること (つまり、適用されていること) はわかっていますが、この問題は解決しません。

データの読み込みとは関係のない他のばかげた問題ではないことを確認するために、問題を切り分けようとしました。問題は、Web サービスのクエリ関数から戻るときに発生します (以下のreturn result; )。つまり、Web サービス自体に問題はないはずです。したがって、両方のデバッグ出力が実行され、2 番目の出力には 2726 要素が表示されます。

Web サービス コード:

public IQueryable<Person> GetPeopleWithSubscription()
{
    Debug.WriteLine("Before");
    IQueryable<Person> result = test();
    Debug.WriteLine("After " + result.Count().ToString());
    return result;
}

private IQueryable<Person> test()
{
    return this.ObjectContext.People.Where(p =>
        p.Subscriptions.Count > 0 ||
        p.Subscriptions1.Count > 0 ||
        p.ID < 0);
}

呼び出しコード:

...
_context.Load(_context.GetSubscriptionTypesQuery(), DataLoaded, false);
...

また、古いクライアント (つまり、問題が発生する前) は新しいサーバーでも動作するため、問題はクライアント側にあるようです。ただし、問題が発生してからリポジトリの差分を調べてきましたが、違いを生むものは何も見つかりません (存在しないとは言いません)。

誰でもこの問題を解決できますか? さらに詳しい情報が必要な場合は、お知らせください。

4

1 に答える 1

0

最近、WCF フレームワークのしくみとその背後にある哲学について読んだことがあります。GUI をブロックしている場合、Microsoft は特にタイムアウト時間で遊ぶことをお勧めしません。彼らは、呼び出しが完了するまでに 60 秒以上かかる場合は、再設計が必要になる可能性があると主張しています。ページングの使用を検討しましたか。この UI パターンがすべての種類のデータに適用されるとは限らないことは理解していますが、それほど多くのデータをロードしている場合、ユーザーがすべてを同時に表示する必要がある可能性は低いと思われます。

数週間前に同様の問題が発生し、Web サービスの実装を変更して、マルチスレッド設計を使用して必要な複数の挿入を実行するようにしました。これにより、サービスの処理時間を 60 秒未満に短縮することができました。

うまくいけば、これはあなたを助けるでしょう、

乾杯、

于 2012-04-28T13:30:53.717 に答える