2009-12-01 16 views
10

में प्रोग्रामिक रूप से डब्ल्यूसीएफ टाइमआउट सेट करें मैं सर्वर और क्लाइंट (दोनों सी # में लिखे गए) के बीच कमांड में डब्ल्यूसीएफ का उपयोग कर रहा हूं।डीबग मोड

रिलीज मोड में, टाइमआउट को ~ 20 सेकंड पर सेट किया जाना चाहिए, लेकिन डीबग मोड में मैं उन्हें उच्च मान पर सेट करना चाहता हूं ताकि मैं टाइमआउट के बिना अपने कोड में डीबग/चरण कर सकूं।

मुझे पता है कि मैं app.config फ़ाइल को संशोधित करके टाइमआउट बदल सकता हूं। हालांकि, मेरे पास दो अलग-अलग बाइंडिंग और प्रत्येक में 4 बार मूल्य हैं इसलिए मुझे कई स्थानों में बदलना होगा, और इसे भूलना आसान होगा।

इसे हल करने के लिए, मैं अपने कोड में एक छोटा #if DEBUG-section रखना चाहता हूं जो प्रोग्रामेटिक रूप से टाइमआउट मानों को 1 घंटे तक बदल देता है।

मैं यह करने के लिए निम्न कोड का उपयोग करने की कोशिश की:

Configuration configuration = 
     ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
ServiceModelSectionGroup serviceModel = 
     ServiceModelSectionGroup.GetSectionGroup(configuration); 

BindingsSection bindings = serviceModel.Bindings; 

foreach (var configuredBinding in bindings.WSHttpBinding.ConfiguredBindings) 
{ 
configuredBinding.CloseTimeout = new TimeSpan(0, 30, 0); 
configuredBinding.OpenTimeout = new TimeSpan(0, 30, 0); 

लेकिन * टाइमआउट गुण केवल पढ़ने के लिए कर रहे हैं तो मैं एक संकलन त्रुटि मिलती है।

मुझे प्रोग्रामिंग से स्क्रैच से बाइंडिंग बनाने के विचार का शौक नहीं है। यदि मैं app.config में कुछ विशेषताओं को बदलता हूं, तो मुझे यह सुनिश्चित करने के लिए कोड में एक ही परिवर्तन करना याद रखना होगा कि डीबग-व्यवहार रिलीज-व्यवहार के समान है (टाइमआउट को छोड़कर ..)

किसी को भी इसे संभालने के तरीके पर एक अच्छी युक्ति है?

उत्तर

12

आप कर सकता है निम्नलिखित:

  • बंधन और कोड में अंतिम बिंदु बनाने
  • बाध्यकारी उदाहरण पर समय समाप्ति सेट
  • फिर उन दो तत्वों
का उपयोग कर अपने ग्राहक प्रॉक्सी बनाने

कुछ ऐसा:

BasicHttpBinding myBinding = new BasicHttpBinding("ConfigName"); 
myBinding.CloseTimeout = ....... 
myBinding.OpenTimeout = ....... 
myBinding.ReceiveTimeout = ....... 
myBinding.SendTimeout = ....... 

EndpointAddress myEndpoint = new EndpointAddress("http://server:8181/yourservice"); 

YourServiceClient proxy = new YourServiceClient(myBinding, myEndpoint); 

इस तरह, आप बाध्यकारी टाइमआउट का वर्णन करते समय मूल कॉन्फ़िगरेशन का लाभ उठा सकते हैं और फिर भी आप अपनी इच्छित सेटिंग्स को ट्वीक कर सकते हैं और इससे अपने क्लाइंट प्रॉक्सी बना सकते हैं।

2

आप web.config में दूसरा बाध्यकारी बना सकते हैं और एक लंबा प्रेषण सेटआउट सेट कर सकते हैं।

 if (debug) 
     { 
      proxy = new MyClient("WSHttpBinding_MyLocal"); 
     } 
     else 
     { 
      proxy = new MyClient("WSHttpBinding_MyDev"); 
     } 

     <wsHttpBinding> 
      <binding name="WSHttpBinding_MyLocal" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:20:00" 

...

+0

एक 'Client' में, केवल समय समाप्ति ज्यादातर लोगों कभी आवश्यकता होगी' sendTimeout' https://social.msdn.microsoft.com/Forums/vstudio/en- अमेरिका/84551e45-19a2-4d0d-bcc0-516a4041943d/explaination के- अलग-टाइमआउट-प्रकार –

संबंधित मुद्दे