.NET- এ ওয়েবক্লিয়েন্ট এবং HTTPWebRequest ক্লাসের মধ্যে কী পার্থক্য রয়েছে?


178

.NET এ WebClientএবং HttpWebRequestক্লাসগুলির মধ্যে কী পার্থক্য রয়েছে ? তারা দু'জনেই খুব অনুরূপ কাজ করে। আসলে, কেন সেগুলি একটি শ্রেণিতে একীভূত করা হয়নি (অনেকগুলি পদ্ধতি / ভেরিয়েবল ইত্যাদির একটি কারণ হতে পারে তবে .NET- এ অন্যান্য শ্রেণি রয়েছে যা সেই নিয়ম ভঙ্গ করে)।

ধন্যবাদ।

উত্তর:


242

ওয়েবক্লিয়েন্ট হ'ল HTTPWebRequest এর শীর্ষে সর্বাধিক সাধারণ কাজগুলি সহজ করার জন্য নির্মিত উচ্চ স্তরের বিমূর্ততা। উদাহরণস্বরূপ, আপনি যদি কোনও HTTPWebResponse থেকে সামগ্রীটি পেতে চান তবে আপনাকে প্রতিক্রিয়া স্ট্রিম থেকে পড়তে হবে:

var http = (HttpWebRequest)WebRequest.Create("http://example.com");
var response = http.GetResponse();

var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();

ওয়েবক্লিয়েন্টের সাহায্যে আপনি কেবল এটি করেন DownloadString:

var client = new WebClient();
var content = client.DownloadString("http://example.com");

দ্রষ্টব্য: আমি usingসংক্ষিপ্ততার জন্য দুটি উদাহরণের বিবৃতিগুলি রেখেছি । আপনার ওয়েব অনুরোধের জিনিসগুলি সঠিকভাবে নিষ্পত্তি করার জন্য আপনার অবশ্যই যত্ন নেওয়া উচিত।

সাধারণভাবে, ওয়েবক্লিয়েন্ট দ্রুত এবং নোংরা সহজ অনুরোধগুলির জন্য ভাল এবং যখন আপনাকে সম্পূর্ণ অনুরোধের উপর আরও নিয়ন্ত্রণের প্রয়োজন হয় তখন HTTPWebRequest ভাল।


34
উপরেরটি সত্য, নীচের মতামত: উভয়ই ভয়ানক কারণ HTTPWebRequest নষ্ট হয়ে গেছে। এটি মৌলিক লেখাকে ভুল পরিচালনা করে, যেমন অদ্ভুত কাজকর্মের প্রয়োজন হয় ServicePointManager.Expect100Continue = false, অন্যান্য অ-মানক কাজ করে এবং অনেকগুলি ক্রিকস এবং আইডিয়োসিক্রাইস থাকে। এই সমস্যাগুলি সমাধানে সহায়তার জন্য আমি রেস্টশার্প শুরু করেছি।
জন শিহান

4
এছাড়াও মনে রাখবেন যে ওয়েবক্লিয়েন্টটি একটি উপাদান, সুতরাং আপনি এটি ভিএস সরঞ্জাম উইন্ডো থেকে আপনার ফর্মের মধ্যে টেনে আনতে / নামাতে পারবেন এবং এটি সেখানে ব্যবহার করতে সক্ষম হবেন।
ফিরোজ

1
আমি মনে করি কিছুক্ষণ আগে আমি বেসিক লেখার সাথে httpwebrequest ব্যবহার করার চেষ্টা করেছি। আমি তাতে একমত হতে পারি তাহলে আপনি রেস্টশর্প বানিয়েছেন? শান্ত!
গুরুদীপ

19
যে কেউ এই জুড়ে আসছে মত আমি এখন আছে, নোট সেখানে বলা ক্ষেত্রের উপর একটি নতুন খেলোয়াড় HttpClientযে .NET 4.5 দিয়ে আসে যে হতে পারে (? বা নাও হতে পারে) উপরে ঝামেলা কিছু সমাধান ...
Funka

3
ওয়েবক্লিয়েন্ট আইডিস্পোজেবল কার্যকর করে, তাই আপনার করা বিবেচনা করা উচিতusing (WebClient client = new WebClient())
এরিক

32

এছাড়াও ওয়েবক্লিয়েন্টের মেয়াদোত্তীর্ণ সম্পত্তি নেই। এবং এটি সমস্যা, কারণ ড্যাফল্টের মান 100 সেকেন্ড এবং এটি কোনও ইন্টারনেট সংযোগ নেই কিনা তা বোঝাতে খুব বেশি।

এই সমস্যাটির সমাধানের জন্য এখানে https://stackoverflow.com/a/3052637/1303422 রয়েছে


16
প্রশ্ন ছিল কি পার্থক্য। পার্থক্যের মধ্যে একটি হ'ল HTCWebRequest করার সময় ওয়েবক্লিয়েন্টের মেয়াদ উত্তীর্ণ হয় না।
অ্যান্ড্রি এফ।

26

আমি জবাব দিতে এর অনেক দীর্ঘ সময় জানি তবে ভবিষ্যতের পাঠকদের জন্য কেবল একটি তথ্য উদ্দেশ্য হিসাবে:

WebRequest

System.Object
    System.MarshalByRefObject
        System.Net.WebRequest

WebRequestএকটি বিমূর্ত বেস বর্গ। সুতরাং আপনি আসলে এটি সরাসরি ব্যবহার করবেন না। আপনি এটি উদ্ভূত শ্রেণীর মাধ্যমে এটি ব্যবহার করেন - HttpWebRequestএবং FileWebRequest

এর WebRequestউদাহরণ তৈরির জন্য আপনি তৈরি পদ্ধতি ব্যবহার করুন WebRequestGetResponseStreamআয় data stream

এছাড়াও FileWebRequestএবং FtpWebRequestক্লাস যে inheritথেকে WebRequest। সাধারণত, আপনি WebRequestএকটি অনুরোধ করতে এবং ব্যবহারটি রিটার্নটিকে হয় রূপান্তর করতে হবে HttpWebRequest, FileWebRequestবা FtpWebRequest, আপনার অনুরোধের উপর নির্ভর করে। নীচে একটি উদাহরণ দেওয়া হল:

উদাহরণ:

var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com");
var _response = (HttpWebResponse)_request.GetResponse();

WebClient

System.Object
        System.MarshalByRefObject
            System.ComponentModel.Component
                System.Net.WebClient

WebClientক দ্বারা চিহ্নিত একটি সংস্থান থেকে সাধারণ ক্রিয়াকলাপ sendingএবং receivingডেটা সরবরাহ করে URI। সহজভাবে, এটি একটি উচ্চ-স্তরের বিমূর্ততা HttpWebRequest। এই 'সাধারণ ক্রিয়াকলাপগুলি' যা নীচের নমুনায় দেখানো হয়েছে তার WebClientথেকে পৃথক হয় HttpWebRequest:

উদাহরণ:

var _client = new WebClient();
var _stackContent = _client.DownloadString("http://stackverflow.com");

এছাড়াও আছে DownloadData এবং DownloadFileঅধীনে অপারেশন WebClientউদাহরণস্বরূপ। এই সাধারণ ক্রিয়াকলাপগুলি আমরা সাধারণত কী করব তার কোডও সরল করে HttpWebRequest। ব্যবহার করে HttpWebRequest, আমাদের অনুরোধের প্রতিক্রিয়া পেতে হবে, প্রতিক্রিয়াটি StreamReaderপড়ার জন্য তাত্ক্ষণিকভাবে এবং শেষ পর্যন্ত, ফলাফলটি আমরা যে ধরণের প্রত্যাশায় রূপান্তরিত করব। সহ WebClient, আমরা কেবল কল করি DownloadData, DownloadFile or DownloadString

তবে, মনে রাখবেন যে আপনি যে সংস্থানটির অনুরোধ করছেন সেটিকে WebClient.DownloadStringবিবেচনা করবেন না encoding। সুতরাং, যদি আপনি নির্দিষ্ট করে এবং এনকোডিং না করেন তবে আপনি সম্ভবত অদ্ভুত অক্ষরগুলি গ্রহণ করবেন।

দ্রষ্টব্য: মূলত " ওয়েবক্লিয়েন্ট ওয়েডব্রোয়েস্টের তুলনায় কোডের কয়েকটি লাইন গ্রহণ করে "


ওয়েবক্লিয়েন্ট শ্রেণি পোস্ট / পদ্ধতি কী ব্যবহার করে ..? দয়া করে বর্ণনা করার জন্য একটি লিঙ্ক সরবরাহ করুন
কার্তিকেয়

WebRequest আমাদের অনুরোধের পদ্ধতিটি যুক্ত করতে দেয় যেমন একটি সম্পত্তি মেথডের সাথে গেট / পোস্ট করুন। যেখানে ওয়েবক্লিয়েন্টের কার্যকারিতা যুক্ত করার কোনও পদ্ধতি প্রকার নেই।
শেখর শীট

1
@ শিখারশিট আমি webClient.UploadData(url, "POST", bytes)পদ্ধতিটি নির্দিষ্ট করতে ব্যবহার করতে সক্ষম হয়েছি ( এমএসডিএন ডক্স দেখুন )।
জেফ বি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.