HttpClient একই সাথে ব্যবহার করা নিরাপদ?


151

সমস্ত উদাহরণে আমি এর ব্যবহারগুলি খুঁজে পেতে পারি HttpClient, এটি এক অফ কলের জন্য ব্যবহৃত হয়। তবে আমার যদি ক্লায়েন্টের অবিরাম পরিস্থিতি থাকে, যেখানে একসাথে বেশ কয়েকটি অনুরোধ করা যায়? মূলত, client.PostAsyncএকই উদাহরণের বিরুদ্ধে একবারে 2 টি থ্রেডে কল করা কি নিরাপদ HttpClient?

আমি এখানে সত্যিই পরীক্ষামূলক ফলাফল খুঁজছি না। একটি কার্যকারী উদাহরণ হিসাবে কেবল ত্রুটিযুক্ত হতে পারে (এবং এটিতে দৃ a় একটি) এবং একটি ব্যর্থ উদাহরণ একটি ভুল কনফিগারেশনের সমস্যা হতে পারে। আদর্শভাবে আমি এইচটিটিপিপ্লায়েন্টে চুক্তিবদ্ধ হ্যান্ডলিংয়ের প্রশ্নের কিছু প্রামাণিক উত্তর খুঁজছি।


2
এছাড়াও কিভাবে সঠিকভাবে ব্যবহার করার জন্য আরও তথ্যের জন্য এই প্রশ্নের পড়া HttpClient: এবং এটি নিষ্পত্তি stackoverflow.com/questions/15705092/...
মনি Gandham

উত্তর:


152

এমএসডিএন অনুসারে , .NET 4.5 এর পরে নিম্নলিখিত উদাহরণগুলি থ্রেড নিরাপদ (ধন্যবাদ @ আইশেল):

CancelPendingRequests
DeleteAsync
GetAsync
GetByteArrayAsync
GetStreamAsync
GetStringAsync
PostAsync
PutAsync
SendAsync

3
হ্যাঁ, আমি সে সম্পর্কে নিশ্চিত ছিলাম না, যেহেতু এটি এমএসডিএন-এর সমস্ত কিছুর উপর একটি স্ট্যান্ডার্ড সতর্কতা বলে মনে হচ্ছে (এবং কিছুটা এমএসডিএন ব্লগ পড়ার কথা মনে পড়ে যে সেই সতর্কতাটি কীভাবে ভুল হয়েছে, যেহেতু এটি সমস্ত কিছুতে অন্ধভাবে প্রয়োগ করা হয়)।
অ্যালেক্স কে

3
এটা ভুল; আপনার লিঙ্কিত এমএসডিএন পৃষ্ঠার মন্তব্য বিভাগে, এতে বলা হয়েছে যে গেটএসিঙ্ক, পোস্টঅ্যাসেন্স ইত্যাদি সমস্ত থ্রেডই নিরাপদ।
ইস্কেল

4
@ আইশেল: আমি আপনাকে নিশ্চিত করে বলতে পারি যে এই বিষয়টি নিয়ে আলোচনার সময় প্রশ্নে অনুচ্ছেদটি ছিল না
মার্সেল এন।

7
সুতরাং মাইক্রোসফ্ট এইচটিপিপ্লিনেন্টকে পুনরায় ব্যবহারযোগ্য হিসাবে নকশা করেছে তবে ক্লাসে শিরোনামের জন্য উদাহরণ ডেটা রয়েছে: ক্লায়েন্ট.ডাফল্টরেক্সেস্টহাইডার্স.অসেপ্ট.এড (...);
cwills

8
দেরীতে, তবে আমি @wwill এর উপর মন্তব্য করতে চেয়েছিলাম। DefaultRequestHeilers ঠিক সেটাই, ডিফল্ট। আপনি যদি প্রতি-অনুরোধ-ভিত্তিতে বিভিন্ন শিরোনাম চান, আপনি নতুন স্ট্রিংকন্ট () তৈরি করতে পারেন, এতে অতিরিক্ত শিরোনাম সেট করতে পারেন, তারপরে ইউআরআই এবং এইচটিটিপি কনটেন্ট লাগে এমন ওভারলোডটি ব্যবহার করতে পারেন।
রায়ান অ্যান্ডারসন

92

এইচটিপিপ্লিনেন্ট সম্পর্কে হেনরিক এফ। নীলসনের আরও একটি নিবন্ধ এখানে যেখানে তিনি বলেছেন:

" ডিফল্ট এইচটিটিপিপ্লায়েন্ট হ'ল সহজ উপায় যার মাধ্যমে আপনি অনুরোধগুলি প্রেরণ শুরু করতে পারেন A একসাথে এইচটিটিপি অনুরোধ প্রেরণের জন্য একটি একক এইচটিটিপি ক্লায়েন্ট ব্যবহার করা যেতে পারে তাই অনেক পরিস্থিতিতে আপনি কেবল একটি এইচটিটিপি ক্লিনেন্ট তৈরি করতে পারেন এবং তারপরে আপনার সমস্ত অনুরোধের জন্য এটি ব্যবহার করতে পারেন । "


13
যদি ব্যবহারকারীর নাম এবং পাসওয়ার্ড থ্রেডগুলির মধ্যে পরিবর্তন করতে পারে তবে কী হবে? এটাই আমি মনে করি না যে কারও বিষয়ে কথা বলছি
নিকোলাস ডিপিয়াজা

1
@ নিকোলাসডিপিপিজা: কতবার এটি পরিবর্তন হয়? যদি ব্যবহারকারীর / পাসওয়ার্ডের জোড়ার একটি পরিচিত সেট থাকে তবে আপনি এইচটিটিপিপ্লিনেন্টের উদাহরণগুলির একটি পুল তৈরি করতে পারেন।
মার্সেল এন।

হ্যাঁ এটাই আমি শেষ করেছি
নিকোলাস ডিপিয়াজা

2
নোট করুন যে আপনার সমস্ত অনুরোধের জন্য একই HTTPClient পুনঃব্যবহারের ফলে বাসি DNS সমস্যা হতে পারে: github.com/dotnet/corefx/issues/11224
ওহাদ স্নাইডার

1
@ ওহাদস্কিনিডার যদি বিশ্বাস করেন যে সমস্যাটি নেট নেট অবধি সীমাবদ্ধ। আপনি HTTPClient কনস্ট্রাক্টরের মধ্যে একটি কাস্টম HttpClientHandler ইনজেকশনের পরে "সংযোগলাজটাইমআউট" সেট করে নেটটি 4 দিয়ে সমস্যাটি সমাধান করতে পারেন। তবে, 100 সেকেন্ডের জন্য যদি শেষ পয়েন্টে কোনও অনুরোধ না প্রেরণ করা হয় তবে সংযোগটি নিজেই রিফ্রেশ হবে। সুরক্ষিত ওভাররাইড টাস্ক <HttpResponseMessage> SendAsync (HttpRequestMessage অনুরোধ, বাতিলকরণ টোকেন বাতিলকরণ টোকেন) sp var sp = সার্ভিসপয়েন্ট ম্যানেজার.ফিন্ড সার্ভিস পয়েন্ট (অনুরোধ.RequestUri); sp.ConnicationLeaseTimeout = 100 * 1000; }
টিমোথি গঞ্জালেজ

17

হেনরিক এফ। নীলসেনের একটি এমএসডিএন ফোরামের পোস্ট খুঁজে পেয়েছেন (এইচটিপিপ্লেইন্টের অন্যতম প্রধান স্থপতি)।

দ্রুত সংক্ষিপ্তসার:

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