2013-01-31 8 views
10

私は非常に簡単な必要性を持っています - 私のC#コードは、HTTP経由でリモートサーバーに接続し、文字列をダウンロードする必要があります。簡単なGET要求、それ以上はありません。.NET 4.5からHTTP経由で文字列をダウンロードする方法は?

私のアプリケーションが反応し続けることを保証するために、操作にタイムアウト(例えば3秒)を加えたいと思っています。

私の最初の考えはSystem.Net.WebClientですが、タイムアウトはサポートされていません。

次に、私は良い古いSystem.Net.HttpWebRequestを試したかったのですが、残念なことに - .NET 4.5以降はbeen marked as obsoleteです!

どうすれば使用できますか?私はSystem.Net.Http名前空間をチェックアウトし、それが唯一の非同期使用量は、力がTask Sを使用することができ、一般的にのみ(それが使用しているため、同じ古いSystem.Net.HttpWebRequestとにかく下)

本当にすべての新しい機能を追加することなく、抽象化のダースの異なるレイヤーを追加します

私は非同期のものは欲しくない、私は他のスレッドを関与させたくない、私はタスクフレームワークを関与させたくない、私はラッパーのトンを望んでいない。

.NET 4.5ではこれを行う正しい方法は何ですか?

+7

これは非推奨の 'HttpWebRequest'ではなく、コンストラクタです。 'HttpWebRequestコンストラクタを使用しないでください。 WebRequest.Createメソッドを使用して新しいHttpWebRequestオブジェクトを初期化することができます。 – GSerg

+2

WebClient非同期メソッドを使用してタイムアウトを設定することはできます:http://stackoverflow.com/a/601899/54937 –

+0

そして、いつでも 'WebClient'バックグラウンドスレッドに渡し、ある種のセマフォ( 'AutoResetEvent'のような)を使ってタイムアウトしてください。 – Will

答えて

14

HttpWebRequestクラスは非推奨ではなく、そのコンストラクタのみです。

HttpWebRequestコンストラクタを使用しないでください:documentationを引用する

。新しいHttpWebRequestオブジェクトを初期化するには、WebRequest.Createメソッドを使用します。 URI(Uniform Resource Identifier)のスキームがhttp://またはhttps://の場合、CreateHttpWebRequestオブジェクトを返します。

+1

私はそれを逃した。 :) –

2

コンストラクタは、HttpWebRequestクラス自体ではなく、推奨されていません。 WebRequest.Createを使用して、HttpWebRequestのインスタンスを作成します。