2016-05-21 18 views
0

特別なリクエストのタイムアウトを設定しようとしていますが、処理に時間がかかります。このため、次のようにタイムアウトを設定しようとしています。タイムアウトの設定は無効です。

client.RequestFilter = r => { 
    r.Timeout = 1000000; 
    r.ReadWriteTimeout = 1000000; 
} 

ただし、これらの設定は効果がないようです。依頼は依然として約30秒でタイムアウトします。タイムアウトを適切に設定するために使用できるハックがありますか?

ETA:私が受け取っている応答はストリームです。私はこれが好きです:

var stream = client.Send<Stream>(requestDto); 

良い方法はありますか?

+0

いつものStackTrace /例外メッセージ(および.NETプラットフォーム情報、すなわち.NETのバージョンまたはモノラル場合を含めてください/ iOS/Androidなど)を使用してください。 – mythz

答えて

1

ServiceStackのサービスクライアントはHttpWebRequestのラッパーにすぎないので、コードではHttpWebRequestTimeoutReadWriteTimeoutプロパティを直接設定することになります。

リクエストフィルタを使用すると、使用されているHttpWebRequestインスタンスに直接アクセスでき、タイムアウトプロパティを設定しても正常に動作するはずです。それ以外に、.NETのHttpWebRequestの動作を変更できる唯一のクラスはSystem.Net.ServicePointManagerで、DefaultConnectionLimitDnsRefreshTimeoutなどのいくつかのプロパティを設定できます。ただし、Request Timeoutプロパティはありません。

あなたが試すことができる代替ソリューションは、Microsoftの新しいHttpClientライブラリで構築されたServiceStackのJsonHttpClientを使用することです。 Sync APIはHttpClientの基盤となるAsync APIをブロックしているだけなので、Async APIを使用することをお勧めします。

APIは、自分自身を呼び出すために

、あなたが使用してブロック内のストリームにアクセスする必要があり、例えば:

using (var stream = client.Send<Stream>(requestDto)) 
{ 
} 
+0

mythzありがとうございました。私はオフィスに戻ってからこれを試しますが、一方で、非同期APIについてのコメントを説明できますか?私の場合、私は実際に呼び出しをブロックしたい。具体的には、バックグラウンドスレッドで応答ストリームを読み取り、解析し、計算を実行し、UIフォーム(Windowsフォームアプリケーション)に進捗状況を定期的に報告します。より良い方法がありますか? – Bugmaster

+0

@Bugmaster私は、Microsoftの新しい「HttpClient」は、Sync APIを実装するためにAsync APIしか提供していないと言っていますが、結果を得るためにタスクをブロックしています。これは機能しますが、最適ではありません。非同期APIはほとんどの場合、バックグラウンドスレッドがノンブロッキングである必要がないため、メインUIスレッドを待っていて、そこですべての処理を行います。 [HelloMobile](https://github.com/ServiceStackApps/HelloMobile)プロジェクトには、GUIアプリケーションでAsync APIを呼び出す例がいくつかあります。 – mythz

関連する問題