1

WCFプロキシクラスがplinqを介したリクエストの送信をどのように処理するかは正確にはわかりません。次のコードスニピットは問題ないように見えますか、それとも複数のスレッド間で共有状態に問題を引き起こす可能性があるように見えますか?(また、usingブロックは理想的ではないことをすでに理解しています。これは単なる例です)

using (var proxy = new ServiceProxyOfSomeSort())
{
    _aBunchOfMessagesToSend.AsParallel()
        .WithDegreeOfParallelism(SomeDegree).ForAll(m =>
    {
        proxy.SomeOperation(m);
    }
}

スレッドごとに1回プロキシを作成する必要がありますか?スレッド間でプロキシを共有しても大丈夫ですか?ややコストのかかる操作であるため、必要以上にプロキシを作成したくありません。

編集:

サーバー側のサービスの実装の詳細は実際にはありません。要件の観点から、複数のクライアントがいつでも呼び出すことができるように(非同期で)開発する必要がありました。彼らが非同期呼び出しを処理できると仮定すると(これは大きな仮定かもしれません)、私はこれがクライアント側から受け入れられるアプローチであるかどうかを理解しようとしています。それは機能しています、私はこのアプローチに何か落とし穴があるかどうかわかりません。

4

1 に答える 1

1

プロキシに関する質問への回答:スレッドごとに新しいプロキシを作成する必要があります。プロキシの再利用はしばらくの間機能し、数十回のリクエストの後に障害をスローする傾向があります。彼らが言うのが好きなように、その振る舞いは未定義です。新しいプロキシを作成することによるパフォーマンスのオーバーヘッドは(最初のプロキシが作成された後は)それほど大きくないため、大きな問題にはなりません。

サーバーを圧倒する複数の同時リクエストの説明については、数個、または数十個でも問題ありません。サーバーは、プロセッサがスレッドを作成できるのと同じ数のリクエストを処理できる可能性があります。この場合も、単一のソースからの突然のリクエストの流入はサービス拒否攻撃と解釈される可能性があるため、特にサービスの制御が制限されている場合は注意が必要です。

于 2013-03-05T17:30:35.770 に答える