আমি কীভাবে প্রোগ্রামক্রমে ওয়েবক্লিয়েন্টে 2 সংযোগ সীমাটি সরাতে পারি


88

প্রতিটি আরএফসি-ক্লায়েন্টের কাছ থেকে এই "জরিমানা" আরএফসি ম্যান্ডেট যে তারা প্রতি হোস্ট প্রতি 2 টির বেশি সংযোগ ব্যবহার না করার বিষয়ে সতর্ক থাকবে ...

মাইক্রোসফ্ট এটি ওয়েবক্লিয়েন্টে প্রয়োগ করেছে। আমি জানি যে এটি দিয়ে বন্ধ করা যেতে পারে

App.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
 <system.net> 
  <connectionManagement> 
   <add address="*" maxconnection="100" /> 
  </connectionManagement> 
 </system.net> 
</configuration> 

( http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/1f863f20-09f9-49a5-8eee-17a89b591007 এ পাওয়া গেছে )

তবে আমি কীভাবে প্রোগ্রামটিমে এটি করতে পারি?

থেকে Accordin http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx

"ডিফল্ট সংযোগমিট সম্পত্তি পরিবর্তন করা বিদ্যমান সার্ভিস পয়েন্ট অবজেক্টগুলিতে কোনও প্রভাব ফেলবে না; পরিবর্তনের পরে শুরু হওয়া কেবল পরিষেবা পয়েন্ট অবজেক্টগুলিকেই এটি প্রভাবিত করে this

আমি যখন ওয়েবক্লিয়েন্টকে প্রশংসন করি তখন সীমাটি কনফিগার করা ভাল আমি চাই, তবে আমার প্রোগ্রামের শুরুতে প্রোগ্রামের এই দু: খিত সীমাবদ্ধতা অপসারণ করাও ভাল।

আমি যে সার্ভারটি অ্যাক্সেস করি তা ইন্টারনেটে কোনও নিয়মিত ওয়েব সার্ভার নয়, তবে আমার নিয়ন্ত্রণে এবং স্থানীয় ল্যানে। আমি এপিআই-কল করতে চাই, তবে আমি ওয়েব সার্ভিসগুলি বা রিমোটিং ব্যবহার করি না


15
এটি আসলে কোনও মানদণ্ড নয়। আরএফসি "সুপারিশ করে" যে আপনি ক্লায়েন্টদের দুটি সংযোগে সীমাবদ্ধ রাখুন, তবে এটি আসলে কোনও প্রয়োজন নয়। সম্ভাবনার চেয়ে বেশি, পোস্টারে একবারে 2 টিরও বেশি আইটেম ডাউনলোড করতে হবে।
এরিক ফানকেনবাশ

12
আমি আমার নিজের সার্ভারে একটি এপিআই অ্যাক্সেস করি। আমি ইন্টারনেটে হোস্টদের ক্ষতি করতে চাই না।
খ্রিস্টান

12
আমি একটি লোড পরীক্ষার সরঞ্জাম তৈরি করতে সংযোগ সীমাটি বাড়িয়েছি। 2 ম্যাসলি সংযোগ দিয়ে পরীক্ষা লোড করা সত্যই কঠিন hard আমি নিশ্চিত যে অনেক সংযোগ ব্যবহার করার জন্য ব্রাউজিংবিহীন কারণ রয়েছে।
স্কট এস

4
বিটিডাব্লু, উপরের কনফিগারেশনটি কেবল ওয়েবক্লিয়েন্ট নয়, সমস্ত। নেট নিয়ন্ত্রিত সংযোগগুলিকে প্রভাবিত করবে।
স্কটস

4
দু'জনের বেশি কেন? আসুন আমরা এই প্রশ্নটি ঘুরিয়ে দেখি: কেন কেন আমি একই সময়ে অবিচ্ছিন্নভাবে একটি সার্ভারে দু'টির বেশি অনুরোধ জানাতে পারি না? 2 কেবল আক্ষরিক অর্থে একটি সীমাবদ্ধতা।
সিএসবা তোথ

উত্তর:


50

এখান থেকে এবং অন্য কোথাও কিছু টিপসের সাহায্যে আমি যে ওয়েবক্লিয়েন্ট ক্লাসটি ব্যবহার করছিলাম তা ওভাররাইড করে আমার অ্যাপ্লিকেশনটিতে এটি ঠিক করতে সক্ষম হয়েছি:

class AwesomeWebClient : WebClient {
    protected override WebRequest GetWebRequest(Uri address) {
        HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(address);
        req.ServicePoint.ConnectionLimit = 10;
        return (WebRequest)req;
    }
}

28
আইএমএইচও যে সেটিংটি System.Net.ServicePointManager.DefaultConnectionLimitকরা একটি আরও ভাল সমাধান, এটি ধরে নেওয়া যায় না যে এটি WebRequestএকটি HttpWebRequest, যেমন, এটি একটি হতে পারে FileRequest
ডেনিস

120

আগ্রহীদের জন্য:

System.Net.ServicePointManager.DefaultConnectionLimit = x (যেখানে এক্স আপনার পছন্দসই সংযোগের সংখ্যা)

অতিরিক্ত রেফারেন্সের প্রয়োজন নেই

পোস্টের উপরে উল্লিখিত হিসাবে পরিষেবা পয়েন্টটি তৈরি হওয়ার আগে কেবল এটির আগে বলা হয়েছে তা নিশ্চিত করুন।


সুতরাং এটি কী বিশ্বব্যাপী অ্যাপ্লিকেশন_স্টার্টে যুক্ত হতে পারে? সুতরাং এটি তৈরি সমস্ত সংযোগ প্রভাবিত করে?
দ্য অ্যালবার

কীভাবে এবং কোথায় যোগ করতে হবে System.Net.ServicePointManager.DefaultConnectionLimit = x?
অরুল সিদ্ধন

অদ্ভুতভাবে, DefaultConnicationLimit (এফ 12 ব্যবহার করে নেভিগেট) এর কোড মন্তব্যটি বলে যে এর ডিফল্টটি ইনট 32 32 ম্যাক্সভ্যালু। তবে ডিবাগ পরিদর্শন দ্বারা এটি দাবি হিসাবে 2
ক্রোকসেক

7

এই সমাধান আপনাকে যেকোন সময় সংযোগ সীমা পরিবর্তন করতে দেয় :

private static void ConfigureServicePoint(Uri uri)
{
    var servicePoint = ServicePointManager.FindServicePoint(uri);

    // Increase the number of TCP connections from the default (2)
    servicePoint.ConnectionLimit = 40;
}

1 ম সময় যে কেউ এই আহ্বান FindServicePoint , একটি ServicePoint উদাহরণস্বরূপ তৈরি করা হয় এবং একটি WeakReference ভিতরে এটি উপর রাখা তৈরি করা হয় ServicePointManager । একই উরির জন্য পরিচালকের কাছে পরবর্তী অনুরোধগুলি একই উদাহরণটি ফিরে আসে। যদি সংযোগটি পরে ব্যবহার না করা হয় তবে জিসি এটি পরিষ্কার করে দেয়।


4
ফাইন্ড সার্ভিস পয়েন্টে একমাত্র সমস্যাটি হ'ল এটি আপনাকে একটি পরিষেবা পয়েন্ট ফিরিয়ে দেয় তবে আপনি জানেন না যে এটি আপনার ক্লায়েন্টের কাছে একই সার্ভিস পয়েন্ট পাবে কিনা।
jeffa00

4
এটি কোনও "সমস্যা" নয়, এটি কাজের একটি সাধারণ অংশ। সমস্ত সমাধান হিসাবে, আপনি এটি পরীক্ষা করার একটি উপায় খুঁজে বের করতে হবে। আমার উপায়টি ছিল .config এ "1" এ সেটিংস সেট করা, ভয়ানক কার্যকারিতা পর্যবেক্ষণ করা এবং উন্নত কর্মক্ষমতা পর্যবেক্ষণ করে কোডে (এখানে যেমন) সেট করা ছিল।
অ্যাবাকাস

4
ServicePointপরে (আপনার সেটিংস সহ) হারিয়ে গেছেMaxIdleTime
কলিন Breame

5

আপনি যদি সার্ভিস পয়েন্ট অবজেক্টটি আপনার ওয়েবক্লিয়েন্ট দ্বারা ব্যবহৃত হচ্ছে তা খুঁজে পান তবে আপনি এর সংযোগ সীমাটি পরিবর্তন করতে পারেন। HTTPWebRequest অবজেক্টগুলির ব্যবহারের জন্য নির্মিত হয়েছিল সেটিকে পুনরুদ্ধার করার জন্য তাদের একজন অ্যাক্সেসর রয়েছে, যাতে আপনি সেভাবে এটি করতে পারেন। আপনি যদি ভাগ্যবান হন তবে আপনার সমস্ত অনুরোধগুলি একই পরিষেবা পয়েন্টটি ভাগ করে নেবে যাতে আপনার এটি একবারই করতে হবে।

সীমা পরিবর্তন করার কোনও বিশ্বব্যাপী উপায় আমি জানি না। যদি আপনি কার্যকর হওয়ার শুরুর দিকে ডিফল্ট সংযোগের লিমিট পরিবর্তন করে থাকেন তবে আপনি সম্ভবত ভাল থাকবেন।

পর্যায়ক্রমে, আপনি কেবল সংযোগের সীমা নিয়েই বেঁচে থাকতে পারেন, যেহেতু বেশিরভাগ সার্ভার সফ্টওয়্যার আপনাকে যেভাবেই থ্রটল করে চলেছে। :)


এটি সম্পূর্ণরূপে আমার নিয়ন্ত্রণাধীন হওয়ায় এই সার্ভারটি আমাকে সত্যিকার অর্থে থ্রোটাল্ট করবে না (
খ্রিস্টিয়ান

4
একটি সার্ভার প্রচুর সংযোগের সাথে থ্রোটল্ট হতে পারে, তবে আমি এটি কোনও ছোট সার্ভারের (সীমিত ভিএম-তে হোস্ট করা) এমনকি অভিজ্ঞতাও পাইনি। ক্লায়েন্ট পক্ষের সীমা 2 আমাকে অন্যদিকে ধরেছিল। সীমা বাড়ানো পরিস্থিতি মুক্ত করে।
সিএসবা তোথ

4
আমি আরও সন্দেহ করি যে আজকের যে কোনও ব্রাউজার HTTP 1.1 আরএফসি'র 2 এর সীমা মেনে চলবে
সিএসবা তোথ

4

উপরের কনফিগারেশনের অ্যাপ্লিকেশন-কনফিগ সম্পর্কিত আমাদের একটি পরিস্থিতি রয়েছে

এটি একটি কনসোল অ্যাপ্লিকেশনটিতে বৈধ হওয়ার জন্য, আমরা সিস্টেমটি যোগ করেছি on কনফিগারেশন রেফারেন্স dll। রেফারেন্স ব্যতীত উপরেরটি অকেজো ছিল।

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