سؤال

وهذه ولاية المراجع "بخير" من كل RFC عميل أنهم الحذر من عدم استخدام أكثر من 2 اتصالات في المضيف ...

وتطبيق Microsoft هذا في WebClient مما. وأنا أعلم أنه يمكن إيقاف مع

و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

و"تغيير الخاصية DefaultConnectionLimit له أي تأثير على القائمة كائنات ServicePoint. أنه يؤثر على كائنات ServicePoint الوحيدة التي تهيئة بعد التغيير. إذا لم تكن قيمة هذه الخاصية تعيين إما مباشرة أو عن طريق التكوين، والقيمة الافتراضية ل DefaultPersistentConnectionLimit ثابت ".

وأود أفضل لتكوين الحد عندما instanciate في WebClient، ولكن مجرد إزالة هذا القيد حزينة برمجيا في بداية البرنامج للبلدي سيكون على ما يرام أيضا.

والخادم يمكنني الوصول ليس خادم منتظم في شبكة الانترنت، ولكن تحت سيطرتي وفي الشبكة المحلية. أريد أن أفعل API مكالمات، ولكن أنا لا أستعمل خدمات ويب أو الاتصال عن بعد

هل كانت مفيدة؟

المحلول

ومع بعض النصائح من هنا وهناك تمكنت من إصلاح هذا في طلبي عن طريق تجاوز الطبقة WebClient كنت تستخدم:

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

نصائح أخرى

للمهتمين:

وSystem.Net.ServicePointManager.DefaultConnectionLimit = x (حيث x هو عدد المطلوب من الاتصالات)

لا حاجة للحصول على مراجع إضافية

وفقط للتأكد وهذا ما يسمى BEFORE إنشاء مركز خدمة على النحو المذكور أعلاه في هذا المنصب.

وهذا الحل يسمح لك بتغيير حد الاتصال في <م> أي وقت :

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

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

والساعة أي شخص 1ST يدعو هذا FindServicePoint ، و<ل أ href = "https://msdn.microsoft.com/en-us/library/system.net.servicepoint.aspx" يختلط = "نوفولو noreferrer"> ServicePoint يتم إنشاء المثال و<لأ href = "HTTPS : //msdn.microsoft.com/en-us/library/system.weakreference.aspx "يختلط =" نوفولو noreferrer "> WeakReference تم إنشاؤه لعقد لذلك داخل في ServicePointManager . طلبات اللاحقة إلى مدير لنفس أوري نعود لنفس المثال. إذا لم يتم استخدام الاتصال بعد، وGC ينظف عنه.

وإذا وجدت الكائن ServicePoint المستخدمة من قبل WebClient الخاص بك، يمكنك تغيير حد الاتصال به. كائنات HttpWebRequest لها استرجاع لاسترداد واحد أنها شيدت للاستخدام، لذلك يمكن أن تفعل ذلك بهذه الطريقة. إذا كنت محظوظا، قد ينتهي كل طلباتك حتى تقاسم نفس ServicePoint لذلك كنت لا تملك إلا أن تفعل ذلك مرة واحدة.

وأنا لا أعرف من أي وسيلة عالمية لتغيير الحد. إذا غيرت DefaultConnectionLimit في وقت مبكر في التنفيذ، وكنت ربما يكون على ما يرام.

وبدلا من ذلك، هل يمكن أن يعيش مع حد الاتصال، منذ البرمجيات معظم الخادم هو الذهاب الى خنق لكم على أي حال. :)

لدينا موقف بشأن قطعة أعلاه من التكوين في App.Config                       

في أجل أن يكون صالحا في تطبيق وحدة، واضاف نحن دلل إشارة System.Configuration. دون إشارة، كان ما سبق لا طائل منه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top