WCF सेवा में टाइमआउट मान को बढ़ाना


133

मैं WCF सेवा पर 1 मिनट से बड़ा डिफ़ॉल्ट डिफ़ॉल्ट समय कैसे बढ़ाऊं?


जो स्पष्ट नहीं है, लेकिन मुझे लगता है कि आप स्पष्ट रूप से पूछ रहे हैं, यह है कि किसी भी कॉल को संसाधित करने में एक मिनट से अधिक समय लेने के लिए सर्वर की तरफ कॉन्फ़िगर करना संभव है या नहीं। यह संभव नहीं है
gravidThoughts

जवाबों:


196

क्या आप सर्वर साइड या क्लाइंट साइड की बात कर रहे हैं?

एक क्लाइंट के लिए, आप एक बाइंडिंग तत्व के सेंड टाइमआउट विशेषता को समायोजित करना चाहेंगे । एक सेवा के लिए, आप एक बाइंडिंग एलेमनेंट के प्राप्त टाइमआउट विशेषता को समायोजित करना चाहेंगे ।

<system.serviceModel>
  <bindings>
    <netTcpBinding>
      <binding name="longTimeoutBinding"
        receiveTimeout="00:10:00" sendTimeout="00:10:00">
        <security mode="None"/>
      </binding>
    </netTcpBinding>
  </bindings>

  <services>
    <service name="longTimeoutService"
      behaviorConfiguration="longTimeoutBehavior">
      <endpoint address="net.tcp://localhost/longtimeout/"
        binding="netTcpBinding" bindingConfiguration="longTimeoutBinding" />
    </service>
....

बेशक, आपको अपने वांछित समापन बिंदु को उस विशेष बंधन में मैप करना होगा।


मैं समापन बिंदु टैग के अंदर 'बाइंडिंगनाम' का उपयोग करते हुए, बाध्यकारी को कैसे मैप करूं?
ब्लेंकमैन

यह केवल गलत हैreceiveTimeout सत्र आधारित बाइंडिंग के लिए आलस्य के सर्वर साइड को नियंत्रित करता है दृढ़ संकल्प पर। उदाहरण के लिए, सर्वर बेसिकएचटीपी बाइंडिंग के लिए इस सेटिंग का उपयोग नहीं करेगा। आपको WCF के लिए अपना स्वयं का सर्वर साइड प्रोसेसिंग टाइमआउट रोल करना होगा
gravidThoughts

45

विजुअल स्टूडियो 2008 (या यदि आपके पास सही WCF सामान स्थापित है) में टूल मेनू के तहत 'WCF सर्विस कॉन्फ़िगरेशन एडिटर' नामक एक विकल्प है।

वहां से आप क्लाइंट और सेवाओं दोनों के लिए बाध्यकारी विकल्प बदल सकते हैं, इनमें से एक विकल्प समय-आउट के लिए होगा।


उपकरण त्रुटियों को रोकने के लिए जाने का एक शानदार तरीका है जैसे तत्वों को गलत तरीके से लपेटना, वर्तनी आदि। अच्छा कॉल!
मार्करोनकी

लॉग फ़ाइलों को खोलने के लिए अन्य टूल के लिए यहां भी देखें: stackoverflow.com/a/34283667/187650
juFo

8

अलग-अलग टाइमआउट का मतलब अलग-अलग चीजें हैं। जब आप क्लाइंट पर काम कर रहे हों .. तो आप ज्यादातर SendTimeout को देख रहे हों - इस संदर्भ को देखें - अद्भुत और प्रासंगिक विवरण: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread / 84551e45-19a2-4d0d-bcc0-516a4041943d /


8

आप दो तरीके चुन सकते हैं:

1) ग्राहक में कोड द्वारा

public static void Main()
{
    Uri baseAddress = new Uri("http://localhost/MyServer/MyService");

    try
    {
        ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService));

        WSHttpBinding binding = new WSHttpBinding();
        binding.OpenTimeout = new TimeSpan(0, 10, 0);
        binding.CloseTimeout = new TimeSpan(0, 10, 0);
        binding.SendTimeout = new TimeSpan(0, 10, 0);
        binding.ReceiveTimeout = new TimeSpan(0, 10, 0);

        serviceHost.AddServiceEndpoint("ICalculator", binding, baseAddress);
        serviceHost.Open();

        // The service can now be accessed.
        Console.WriteLine("The service is ready.");
        Console.WriteLine("Press <ENTER> to terminate service.");
        Console.WriteLine();
        Console.ReadLine();

    }
    catch (CommunicationException ex)
    {
        // Handle exception ...
    }
}

2) एक वेब सर्वर में WebConfig द्वारा

<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding openTimeout="00:10:00" 
                 closeTimeout="00:10:00" 
                 sendTimeout="00:10:00" 
                 receiveTimeout="00:10:00">
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>

अधिक विवरण के लिए आधिकारिक दस्तावेज देखें

बाइंडिंग पर टाइमआउट मान कॉन्फ़िगर करना

वर्ग WSHttpBinding


0

बाइंडिंग टाइमआउट (जो Timespans में हैं) के अलावा, आपको इसकी आवश्यकता भी हो सकती है। यह सेकंड में है।

<system.web>
    <httpRuntime executionTimeout="600"/><!-- = 10 minutes -->
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.