WebClient مقابل httpwebrequest / httpwebresponse
-
18-09-2019 - |
سؤال
يبدو لي أن معظم ما يمكن إنجازه به HttpWebRequest/Response
يمكن أيضا أن يتحقق مع WebClient
صف دراسي. قرأت في مكان ما WebClient
هو المجمع رفيع المستوى ل WebRequest/Response
.
حتى الآن، لا أستطيع أن أرى أي شيء يمكن إنجازه HttpWebRequest/Response
التي لا يمكن إنجازها WebClient
, ، كما أن HttpWebRequest / الاستجابة سيمنحك المزيد من التحكم "المحبوس".
متى يجب أن أستخدم WebClient ومتى HttpWebRequest/Response
ب (بوضوح، HttpWebRequest/Response
هي http الخاصة.)
إذا HttpWebRequest/Response
هي مستوى أقل ثم WebClient
, ، ماذا يمكنني إنجازه HttpWebRequest/Response
أن لا أستطيع تحقيق مع WebClient
?
المحلول
استخدام HttpWebRequest
يمنحك المزيد من التحكم في الطلب. يمكنك ضبط ملفات تعريف الارتباط والرؤوس والبروتوكول وما إلى ذلك ... في الاستجابة، يمكنك أيضا استرداد ملفات تعريف الارتباط والرؤوس
نصائح أخرى
HttpWebRequest
تكشف الكثير من الأشياء التي تتيح لك التحكم في بروتوكول المحبوس بخير، على سبيل المثال: سواء كنت ترغب في استخدام الحفاظ على حيا، ما هو تجمع الاتصالات المراد استخدامه، ما إذا كان يجب أن يكتب المخزن المؤقت أم لا، إلخ.
WebClient
لا يعرض كل هؤلاء (على الرغم من أنه يمكنك الفئة الفرعية من WebClient
و getAccess إلى كائن الطلب الأساسي).
WebClient
مفيد بالنسبة لتلك المواقف التي ترغب فيها فقط في إجراء عملية (على سبيل المثال: تحميل Post / Get / form) ولا يمكن إزعاجها لإنشاء وإدارة HttpWebRequest
, RequestStream
, HttpWebResponse
, ودفق الاستجابة.
من بلوق تيم هايو http://timheuer.com/blog/archive/2008/03/14/calling-services-with-silverlight-2.aspx.
بدلا من ذلك في Silverlight، سترغب في استخدام WebClient أو httpWebRequest. ماهو الفرق؟ إليك نسخة timheuer. WebClient هو تطبيق أبسط يقوم بالحصول على طلبات بسهولة بسهولة والحصول على دفق الاستجابة. httpWebRequest هو عظيم عندما تحتاج إلى تحكم أكثر حبيبية قليلا على الطلب، تحتاج إلى إرسال رؤوس أو آخر التخصيصات.
ال العميل على شبكة الإنترنت يعمل Class على مؤشر ترابط واجهة المستخدم، لذلك لا تستجيب واجهة المستخدم أثناء تنزيل البيانات من الإنترنت. من ناحية أخرى، httpwebrequest. لا تمنع الطبقة موضوع واجهة المستخدم، وتطبيقك مستجيب. لذلك، في التطبيقات التي يتم فيها تنزيل كمية كبيرة من البيانات من الإنترنت أو إذا كان مصدر البيانات بطيئا للوصول، يجب عليك استخدام فئة HTTPWebRequest؛ في جميع الحالات الأخرى، يجب عليك استخدام فئة WebClient.
شيء آخر آخر httpwebrquest يسمح لك بالضغط ولكنه Net.WebClient فئة لا تدعم ضغط HTTP
عيب آخر ل WebClient
هل يتجاهل HTTP ContentType
'س charset
القيمة عند استخدامها للحصول على نص الاستجابة. يجب عليك ضبط الترميز بشكل صريح عبر Encoding
خاصية.
"htttpwebrequest" قديم في .NET 4.5. الآن، هذه الفئة الداخلية فقط.
مثال على ذلك: نشر البيانات واستعادة البيانات المعالجة في دورة طلب واحدة / استجابة يبدو مستحيلا مع WebClient، ولكن يمكنك القيام بذلك باستخدام HTTTPWebRequest.