none
HttpClient WebClient HttpWebRequestの取り扱いについて RRS feed

  • 質問

  • 表記の通りC#でAIなどAzure APIサービスアプリの作成を考えていますが、

    HttpClient × WebClient × HttpWebRequest

    のどれを使用すればいいか悩んでいます。

    どのWEBクラスを使用するのはいいでしょうか?

    私の考えは、

    HttpClient

    メリット:非同期で動かせる。コードがわかりやすい。

    デメリット:スピードが遅い、仕様的バグがある?

    WebClient 

    メリット:スピードが速い、コードも簡略的。

    デメリット:コードの書き方が良くも悪くも中途半端。同期のみ。

    HttpWebRequest

    メリット:スピードが速い

    デメリット:コードが長くなる。同期のみ。

    と考えていますが、ご意見がありましたら、返信ください。

    2020年10月27日 3:17

回答

すべての返信

  • # C#を使うのであればそちらのフォーラムのほうが適切かと…。

    HttpWebRequestが一番まともかも。同期・非同期どちらでも使用できます。コネクションもフレームワーク側で管理してくれます。

    WebClientはHttpWebRequestを簡単に操作するようにラップしたものなので、これで満足であれば使用すればいいですし、細かい制御が必要な場合はHttpWebRequestに乗り換えることになります。

    HttpClientは非同期を前提に再設計されたもので、同期処理はできません。またコネクションをアプリケーション側で管理することになるので、多数のリクエストを発行する場合は非常にややこしくなります。(この部分を指して仕様バグと表現されましたか?)

    2020年10月27日 5:58
  • HttpWebRequestは非同期も対応できたのですね。

    勉強不足でした。

    なんとなくそんな気もしていましたが、HttpWebRequestですか。

    キャストが必ずいるので何となく、コードが長くなるのが抵抗がありましたが、

    下手に制御するよりフレームワークに任せるところは任すといったところでしょうか?

    ご回答ありがとうございました。


    # C#を使うのであればそちらのフォーラムのほうが適切かと

    フォーラム違いですみません。

    2020年10月27日 7:07
  • .NET Framework 4.5からHttpWebRequestを返すWebRequest.CreateHttpが用意されているため、キャストも不要です。

    コードを短く済ますのであればWebClientも選択肢に含めるのもいいでしょう。.NET Framework 4.5で導入されたasyncを用いた非同期にも対応しています。WebClient.*TaskAsync

    • 回答としてマーク FakeBlue 2020年11月2日 9:38
    2020年10月27日 11:44
  • FakeBlueさん、こんにちは。フォーラムオペレーターのKumoです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。 

    より良いサポートのため、「Stack Overflow」にご投稿いただくことをご検討ください。

    お手数ですが、ご協力の程どうかよろしくお願いいたします。 


    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2020年10月29日 5:23
    モデレータ
  • リンク先は英語サイトですが、この説明文で英語投稿を求める意味も含んでいるのでしょうか? それとも、サイトの言語を無視して日本語で投稿することを推奨しているのでしょうか?
    いずれにしても、モデレーターの投稿として無責任すぎませんか?
    2020年10月29日 9:11
  • 佐祐理さん、お世話になっております。Kumoです。

    申し訳ございません。
    ご指摘いただいた通り、StackOverflowサイトは英語サイトであり、ネットで情報を探して、「StackOverflow」サイトはAzure API関連をサポートしていますので、質問者さんに誘導しようとしました。

    私からの投稿には「英語サイト」という注意言語を書き忘れてしまいまして、申し訳ございません。
    今後気を付けます。


    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2020年10月29日 9:53
    モデレータ