6

私は、さまざまな方法を備えた非常に大きな「古い」WCF サービスを持っています。

これらのメソッドのほとんどは「通常」であるため、10 秒以内に応答する必要がありますが、処理に時間がかかるメソッド (8 または 9) がいくつかあり、応答を取得するのに時間がかかることがあります。

receivetimeout と sendtimeout を 00:40:00 に設定して、これらのプロセスを完了するのに十分な時間を確保しました。

問題は、接続の問題が発生することがあり、「通常の」方法ではクラッシュするのに非常に長い時間がかかることです...

彼らは非常に大きなモデルを使用し、すべての呼び出しでサービスからモデルを再利用したかったため、すべて同じサービスに含まれています (PersonsService.User と RobotsService.User を持たない...異なる場所で同じクラスであるため)。サービス)。

私が想像する最初の解決策は、それらの長いプロセスで別のサービスを作成し、通常のサービスに短いタイムアウトを設定することです...しかし、モデルの使用のために多くの変更を加える必要があります...

各呼び出しで異なるタイムアウトを設定する方法はありますか? それともサービス方法で?とにかくサービスをチャンクする必要がありますか?

前もって感謝します!!

4

1 に答える 1

10

まず、あなたのケースで設定するタイムアウトは ですOperationTimeout。これにより、サービスがタイムアウトする前に応答を待機する時間制限が許可されます。クライアント側から呼び出しを行う前に、操作のタイムアウトを変更できます。

チャネルにを設定するOperationTimeoutには、プロキシ/チャネル インスタンスを case asIContextChannelおよび set と入力しますOperationTimeout

例えば:

IClientChannel contextChannel = channel as IClientChannel;
contextChannel.OperationTimeout = TimeSpan.FromMinutes(10);

HTH、アミット

于 2012-10-18T18:39:13.147 に答える