2016-07-16 16 views
1

ajaxからWCFサービスを呼び出す際に問題があります。wcfのループでストアドプロシージャを呼び出す

私はWCFにオブジェクトの配列を渡します。オブジェクトごとに、ADO.NET経由で呼び出すストアドプロシージャが必要です。

問題は、ループ内でこのプロシージャをコールすると、アプリケーションが遅れを開始することです。

私に教えてください。どのように修正することができますか?

+1

ストアドプロシージャを呼び出すコードを含め、コードを投稿する必要があります。 –

+0

私はado.netとwcfに基づいているDBのために独自のライブラリを使用していたので、役に立たないと思うのですが、wcfはオペレーション契約で古典的な実装をしています。 –

+0

あなたが渡しているリストにいくつのアイテムがありますか?それを処理する順序は重要ですか? –

答えて

1

変更できるストアドプロシージャですか? table-valued parametersを使用するようにストアドプロシージャを変更すると、パフォーマンスが大幅に向上する可能性があります。この方法では、ストアドプロシージャをオブジェクトごとに1回呼び出す代わりに、ストアドプロシージャを1回呼び出してすべてのオブジェクトを渡します。

リンクされたドキュメントは徹底していますが、他の例についてはGoogleをお勧めします。これを初めて使用する際には、いくつかの新しいステップを習得しなければなりませんが、それを理解すれば、このようなシナリオの強力なツールになります。

SQLサーバーでは、新しいテーブル値型を作成します。構文は表を定義するのと非常によく似ています。次に、そのパラメーターを受け取るストアード・プロシージャーを変更します。プロシージャ内では、テーブルから行うのと同じようにパラメータから選択します。

アプリケーションでは、定義したテーブルに対応するDataTableを作成し、送信するデータの行を入力します。

複数の値をストアドプロシージャ(コンマ区切りの文字列を使用する場合など)に渡すために奇妙なことをしたことがある人は、これが解毒剤です。

+0

ありがとう、私はそれを試して助けてくれると言うでしょう –

+0

@DenisStephanovこのソリューションはループをストアプロシージャに移動します。ループは依然としてシングルスレッドになります。そのため、プロシージャが各アイテムに対して長時間実行されているプロセスを実行している場合は、ラグを取得します。 –

関連する問題