ওয়েবক্লিয়েন্ট বনাম HttpWebRequest / HttpWebResponse


132

আমার কাছে মনে হয় যা সম্পন্ন করা যায় তার বেশিরভাগটি ক্লাসের HttpWebRequest/Responseসাথেও সম্পন্ন করা যায় WebClient। আমি কোথাও পড়েছি WebClientএটি একটি উচ্চ স্তরের মোড়কের জন্য WebRequest/Response
এখনও অবধি, আমি এমন কিছু দেখতে পাচ্ছি না যা দিয়ে সম্পাদন করা HttpWebRequest/Responseযায় না WebClient, বা এইচটিপিওয়েব্রিকয়েস্ট / রেসপন্স আপনাকে আরও "সূক্ষ্ম-দান" নিয়ন্ত্রণ দেয়।

আমার কখন ওয়েবক্লিয়েন্ট ব্যবহার করা উচিত HttpWebRequest/Response? (অবশ্যই, HttpWebRequest/Responseএইচটিটিপি নির্দিষ্ট।)

যদি HttpWebRequest/Responseনিম্ন স্তরের হয় তবে WebClientআমি কী অর্জন করতে পারি HttpWebRequest/Responseযা আমি অর্জন করতে পারি না WebClient?

উত্তর:


87

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


14
টমাস, এখনও নিশ্চিত নয় ... ওয়েবক্লিয়েন্টের একটি শিরোনামের সম্পত্তি রয়েছে, আপনি কুকিটি এই জাতীয় পুনরুদ্ধার করতে পারেন: স্ট্রিং কুকি = ওয়েবক্লিনেন্ট.সেস্পোনসহাইডার্স ("সেট-কুকি") এবং সেট করুন: ওয়েবক্লিয়েন্ট.হেইডার্স.এড ("কুকি", "" CommunityServer-UserCookie ... ");
ড্যান

14
HTTPWebRequest ব্যবহার করে আপনি একটি সময়সীমা নির্ধারণ করতে পারেন। ওয়েবক্লিয়েন্টে এটি অসম্ভব।
ripper234

14
@ ripper234, আসলে এটা হল সম্ভব: আপনি শুধু উত্তরাধিকারী WebClient করতে হবে এবং HttpWebRequest কাস্টমাইজ করতে GetWebRequest ওভাররাইড
টমাস লেভিসকিউ

15
@ থমাস লেভসেক যদি আপনি ওয়েবক্লিয়েন্টের উত্তরাধিকার সূত্রে উত্তেজিত হয়ে থাকেন এবং ওয়েবরিউয়েস্টকে ওভাররাইড করছেন তবে ওয়েবক্লিয়েন্টটি ব্যবহার করা অর্থহীন বলে মনে হচ্ছে ...
হাগাই এল

5
@ হাইগাইল, আমি একমত নই ... আপনাকে সম্পূর্ণ অনুরোধটি ম্যানুয়ালি base.GetWebRequestতৈরি করতে হবে না, আপনি এটি তৈরি করতে ব্যবহার করতে পারেন এবং তারপরে আপনি যা চান ঠিক তেমন পছন্দ করতে পারেন
টমাস লেভসেক

54

HttpWebRequest আরও অনেক স্টাফ উন্মোচিত করে যা আপনাকে জরিমানাযুক্ত গ্রেড প্রোটোকল নিয়ন্ত্রণের অনুমতি দেয়, উদাহরণস্বরূপ: আপনি কীপ-অ্যালাইভ ব্যবহার করতে চান, কোন সংযোগ পুলটি ব্যবহার করতে হবে, বাফার লেখবে কি না, ইত্যাদি ইত্যাদি whether

WebClientএই WebClientসমস্তগুলি উন্মোচিত করে না (যদিও আপনি অন্তর্নিহিত অনুরোধ অবজেক্টটি থেকে সাবক্লাস করতে এবং প্রবেশ করতে পারেন )।

WebClient(: মন্তব্যগুলি পোস্ট / তাহলে GET / ফরম আপলোড যেমন) এবং নির্মাণ ও পরিচালনা বিরক্ত করা নাকিসুরে কথা সেই পরিস্থিতিতে যেখানে আপনি শুধু একটি অপারেশন করতে চান জন্য দরকারী HttpWebRequest, RequestStream, HttpWebResponse, এবং প্রতিক্রিয়া স্ট্রীম।


13
এছাড়াও, আরও একটি জিনিস রয়েছে যা আমি উল্লেখ করতে ভুলে গিয়েছিলাম। ওয়েবক্লিয়েন্ট একটি কম্পোনেন্ট অবজেক্ট, অন্যদিকে এইচটিটিপিওয়েব্রেকয়েস্ট নয়। ওটার মানে কি? ঠিক আছে, আপনি যদি জিইউআই অ্যাপ্লিকেশন তৈরি করতে ভিজ্যুয়াল স্টুডিও ব্যবহার করছেন, তবে আপনি নিজের ফর্মের উপর ওয়েবক্লিয়েন্ট উপাদানটি টেনে / ফেলে দিতে পারেন এবং এটি HTTP / FTP ইত্যাদি সার্ভারগুলিতে অনুরোধ জারি করতে ব্যবহার করতে পারেন।
11:50

14

টিম হিউয়ারের ব্লগ থেকে - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx

সিলভারলাইটের পরিবর্তে আপনি ওয়েবক্লিয়েন্ট বা HttpWebRequest ব্যবহার করতে চাইবেন। পার্থক্য কি? টিমহিউর সংস্করণ এখানে। ওয়েবক্লিয়েন্ট হ'ল জিইটি রিকুয়েস্টেশনগুলি খুব সহজেই করা এবং একটি প্রতিক্রিয়া প্রবাহ পাওয়া সহজ বাস্তবায়ন। আপনি যখন অনুরোধটির উপর কিছুটা বেশি দানাদার নিয়ন্ত্রণ প্রয়োজন, শিরোনাম বা অন্যান্য পছন্দসই পাঠাতে হবে তখন এইচটিটিপিওব্রেউকয়েস্ট দুর্দান্ত।


7
ওয়েবক্লিয়েন্ট আপলোড স্ট্রিং, আপলোডডাটা এবং আপলোডফাই সহ পোষ্টেরও অনুমতি দেয়
টমাস

@ থমাসলভেস্কে কি আজ ক্লাসগুলির একটি নতুন সংস্করণ রয়েছে? আমি দেখতে পাচ্ছি যে এই আলোচনাটি কিছুটা, হুম ... বয়স্ক ...
কনরাড ভিল্টারস্টন

@ কনরাডভিল্টারস্টেন, আমি মনে করি না ওয়েবক্লিনেন্ট শ্রেণিতে অনেক পরিবর্তন হয়েছে। নতুন অ্যাপ্লিকেশনগুলির জন্য আমি আপনাকে পরিবর্তে এইচটিটিপিপ্লিনেন্ট ব্যবহার করার পরামর্শ দিচ্ছি, এটি ব্যবহার করাও খুব সহজ এবং আরও নমনীয়।
টমাস লেভেস্ক

1
@ThomasLevesque ঠিক, যে আমি চিন্তা ছিল ছিল। আমি ক্লাসের নামের পার্থক্য হিসাবে এইচটিপি'র কথা স্মরণ করেছি এবং এইচটিপিপি ... অংশ দ্বারা বিভ্রান্ত হয়েছি । এখন আমি সঠিক পথে ফিরে এসেছি। ধন্যবাদ!
কনরাড ভিল্টারস্টন

12

WebClient ইউজার ইন্টারফেস থ্রেডে বর্গ রান, তাই ইউজার ইন্টারফেস ডেটা ইন্টারনেট থেকে ডাউনলোড হচ্ছে প্রতিক্রিয়াশীল নয়। অন্যদিকে, এইচটিটিপিওয়েবরেস্ট ক্লাসটি ইউজার ইন্টারফেস থ্রেডকে ব্লক করে না এবং আপনার অ্যাপ্লিকেশনটি প্রতিক্রিয়াশীল। সুতরাং, অ্যাপ্লিকেশনগুলিতে যেখানে ইন্টারনেট থেকে প্রচুর পরিমাণে ডেটা ডাউনলোড করতে হয় বা যদি ডেটাটির উত্স অ্যাক্সেস করতে ধীর হয়, আপনার HTTPWebRequest শ্রেণিটি ব্যবহার করা উচিত; অন্যান্য সমস্ত ক্ষেত্রে, আপনার ওয়েবক্লিয়েন্ট ক্লাস ব্যবহার করা উচিত।


1
বিপরীতে ডাব্লুপি 7-তে সত্য। HttpWebRequest মার্শাল আমের ইউআই থ্রেডে ফিরে আসে, এখনই আমার দুঃখের শেষ নেই। গ্রার
ক্যামেরন ম্যাকফারল্যান্ড

6
ওয়েবক্লিয়েন্ট অ্যাসিনক্রোনাস পদ্ধতিগুলিকেও সমর্থন করে।
সাইবারমোনক

6

এর আর একটি অসুবিধা WebClientহ'ল এটি যখন আপনি প্রতিক্রিয়া পাঠ্যটি পেতে ব্যবহার করেন তখন এটি HTTP- ContentTypecharsetমানটিকে উপেক্ষা করে । আপনাকে Encodingসম্পত্তিটির মাধ্যমে স্পষ্টভাবে এনকোডিং সেট করতে হবে ।


এটি একটি ভালো দিক; এবং এটি কেবল সেটিংসের বিষয় নয় Encoding- আপনি অনুরোধের পরে এনকোডিংটি জানতে পারবেন না , সুতরাং ওয়েবক্লিয়েন্ট এপিআই এটির সম্ভাবনা খুব কম করে দেয় আপনি কোনও অজানা এনকোডিংয়ে কোনও স্ট্রিং সঠিকভাবে ডাউনলোড করতে সক্ষম হবেন।
ইমন নের্বোন

5

আর একটি জিনিস এইচটিপিওউবারকোয়েস্ট আপনাকে সংকোচনের অনুমতি দেয় তবে সে নেট.ওয়েবক্লিয়েন্ট ক্লাস এইচটিটিপি সংক্ষেপণ সমর্থন করে না


3
কিছু বিবরণ গোপন করার জন্য ওয়েবক্লিয়েন্টের অন্যান্য সমস্ত উদাহরণের মতো, এটি ওয়েবক্লিয়েন্ট সাবক্লাসিং এবং ওভাররাইডিং দ্বারা স্থির করা যেতে পারে GetWebRequest। এই ক্ষেত্রে, আপনি কেবল অন্তর্নিহিত HttpWebRequest.AutomaticDecompressiongসম্পত্তিটি সামলান )।
পৃষ্ঠপোষক

5

"HTTPWebRequest" .NET 4.5 এ অপ্রচলিত। এখন, এই শ্রেণিটি কেবল অভ্যন্তরীণ।


2
প্রকৃতপক্ষে. WebRequestপরিবর্তে ব্যবহার করুন।
সিল্কফায়ার

2
ক্লাসটি অপ্রচলিত নয়, কনস্ট্রাক্টররা। এবং ক্লাসটি অভ্যন্তরীণ নয়, এটি এখনও সর্বজনীন।
ব্যবহারকারী 247702

2

একটি উদাহরণ: ডেটা পোস্ট করা এবং এক অনুরোধ / প্রতিক্রিয়া চক্রটিতে প্রক্রিয়াজাত ডেটা ফিরে পাওয়া ওয়েবক্লিয়েন্টের সাথে অসম্ভব বলে মনে হয় তবে আপনি এটি HTTPWebRequest দিয়ে করতে পারেন।


2
একটি পোষ্ট সম্পাদন করতে কেবল সাবলীলভাবে WebClient.UploadString বা WebClient.UploadData ব্যবহার করুন এবং একটি প্রতিক্রিয়া স্ট্রিং বা বাইট অ্যারে ফিরে পেতে।
সামজডসন

2
পরিষ্কার করার জন্য, আপলোডস্ট্রিংয়ের রিটার্ন মানটি একটি স্ট্রিং এবং আপলোডডাটা পদ্ধতির রিটার্ন মান একটি বাইট অ্যারে is
নরম্যান এইচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.