WCF: كيف يمكنني إضافة Servicethethethtlingbehavior إلى خدمة WCF؟

StackOverflow https://stackoverflow.com/questions/794338

سؤال

لدي رمز أدناه لإرجاع مثيل لخدمة WCF الخاصة بي ServiceClient:

    var readerQuotas = new XmlDictionaryReaderQuotas()
    {
        MaxDepth = 6000000,
        MaxStringContentLength = 6000000,
        MaxArrayLength = 6000000,
        MaxBytesPerRead = 6000000,
        MaxNameTableCharCount = 6000000
    };


    var throttlingBehaviour = new ServiceThrottlingBehavior(){MaxConcurrentCalls=500,MaxConcurrentInstances=500,MaxConcurrentSessions = 500}; 
    binding = new WSHttpBinding(SecurityMode.None) {MaxReceivedMessageSize = 6000000, ReaderQuotas = readerQuotas};

    dualBinding = new WSDualHttpBinding(WSDualHttpSecurityMode.None)
                      {MaxReceivedMessageSize = 6000000, ReaderQuotas = readerQuotas};

    endpointAddress = new EndpointAddress("http://localhost:28666/DBInteractionGateway.svc"); 

    return new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), dualBinding, endpointAddress);

في الآونة الأخيرة كنت أواجه بعض المشاكل مع المهلة، وبالتالي قررت إضافة سلوك خانق، مثل هذا:

    var throttlingBehaviour = new ServiceThrottlingBehavior () {
        MaxConcurrentCalls=500, 
        MaxConcurrentInstances=500,
        MaxConcurrentSessions = 500
    }; 

سؤالي هو، حيث في التعليمات البرمجية أعلاه يجب أن أضيف هذا throttlingBehaviour لي MusicRepo_DBAccess_ServiceClient نموذج؟


من بعض الأمثلة التي وجدت على الويب، فإنها تفعل شيئا مثل هذا:

ServiceHost host = new ServiceHost(typeof(MyService));
ServiceThrottlingBehavior throttleBehavior = new ServiceThrottlingBehavior
{
    MaxConcurrentCalls = 40,
    MaxConcurrentInstances = 20,
    MaxConcurrentSessions = 20,
};
host.Description.Behaviors.Add(throttleBehavior);
host.Open();

لاحظ أنه في الرمز أعلاه يستخدمون ServiceHost في حين أنني لست كذلك، فهي فتحها (مع Open()) في حين أفتح MusicRepo_DBAccess_ServiceClient مثيل ... وهذا ما حصلت عليه في حيرة من أمري.

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

المحلول

يمكنك تحديد السلوك في ملف التكوين AFAIK، وسيطيع العميل الذي تم إنشاؤه، باستخدام السلوكيات.

تم استبعاد بعض أقسام التكوين للإيجاز

<service 
    behaviorConfiguration="throttleThis" />

        <serviceBehaviors>
            <behavior name="throttleThis">
                <serviceMetadata httpGetEnabled="True" />
                <serviceThrottling
                    maxConcurrentCalls="40"
                    maxConcurrentInstances="20"
                    maxConcurrentSessions="20"/>
            </behavior>
        </serviceBehaviors>

نصائح أخرى

يمكن القيام به في التعليمات البرمجية لأولئك، مثلي، الذي تكوين في وقت التشغيل.

نسخة VB:

    Dim stb As New ServiceThrottlingBehavior
    stb.MaxConcurrentSessions = 100
    stb.MaxConcurrentCalls = 100
    stb.MaxConcurrentInstances = 100
    ServiceHost.Description.Behaviors.Add(stb)

C # الإصدار:

    ServiceThrottlingBehavior stb = new ServiceThrottlingBehavior {
        MaxConcurrentSessions = 100,
        MaxConcurrentCalls = 100,
        MaxConcurrentInstances = 100
    };
    ServiceHost.Description.Behaviors.Add(stb);

الاختناق هو سلوك جانب الخدمة (الخادم) وليس الجانب العميل واحد

آرنون

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