Silverlight アプリケーションで Silverlight Enabled WCF サービスを呼び出すと、ユーザーがタイムアウトになることがあります。サービスクライアントが応答のために許可する時間を増やす最も簡単な方法は何ですか?
スローされる正確な例外は次のとおりです。 System.TimeoutException: [HttpRequestTimedOutWithoutDetail]
ありがとう
Silverlight アプリケーションで Silverlight Enabled WCF サービスを呼び出すと、ユーザーがタイムアウトになることがあります。サービスクライアントが応答のために許可する時間を増やす最も簡単な方法は何ですか?
スローされる正確な例外は次のとおりです。 System.TimeoutException: [HttpRequestTimedOutWithoutDetail]
ありがとう
これは、Silverlight アプリの ServiceReference.ClientConfig ファイルのノードで設定できます。
ここで受け入れられた答えは私にはうまくいきませんでした。代わりに、ベース チャネルを IContextChannel にキャストし、それに OperationTimeout を設定する必要がありました。
そのためには、ServiceReference の名前と一致する部分クラスを含む新しいファイルを作成する必要がありました。私の場合、PrintReportsService がありました。コードは以下です。
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace RecipeManager.PrintReportsService
{
public partial class PrintReportsClient : System.ServiceModel.ClientBase<RecipeManager.PrintReportsService.PrintReports>, RecipeManager.PrintReportsService.PrintReports
{
public void SetOperationTimeout(TimeSpan timeout)
{
((System.ServiceModel.IContextChannel)base.Channel).OperationTimeout = timeout;
}
}
}
次に、クライアントを作成するときに、次のことを行います。
PrintReportsService.PrintReportsClient client = new RecipeManager.PrintReportsService.PrintReportsClient();
client.SetOperationTimeout(new TimeSpan(0, 4, 0));
それは私のためにそれをしました!詳細はこちらで入手できますが、この投稿のコード スニペットはコンパイルされません。
これは設定できますが、基になる HTTP ライブラリによって定義された上限があります (5 分だと思います)。より高い値を使用すると、上限に戻ることに注意してください。また、サーバーでもタイムアウトを構成する必要がある場合があることに注意してください。
IEで互換モードを有効にすることでこれを修正しました
タイムアウトを変更するのではなく、Silverlight アプリケーションからサーバーへのタイマー ベースのコールバックを実装して、セッションが期限切れにならないようにする必要があると思います。これにより、すべてのアプリケーションでタイムアウトが長くなるというオーバーヘッドがなくなります。