Increasing the timeout value in a WCF service

后端 未结 5 510
半阙折子戏
半阙折子戏 2020-11-27 13:03

How do I increase the default timeout to larger than 1 minute on a WCF service?

相关标签:
5条回答
  • 2020-11-27 13:33

    Are you referring to the server side or the client side?

    For a client, you would want to adjust the sendTimeout attribute of a binding element. For a service, you would want to adjust the receiveTimeout attribute of a binding elemnent.

    <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>
    ....
    

    Of course, you have to map your desired endpoint to that particular binding.

    0 讨论(0)
  • 2020-11-27 13:33

    You can choose two ways:

    1) By code in the client

    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)By WebConfig in a web server

    <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>
    

    For more detail view the official documentations

    Configuring Timeout Values on a Binding

    Class WSHttpBinding

    0 讨论(0)
  • 2020-11-27 13:42

    Different timeouts mean different things. When you're working on the client.. you're probably looking mostly at the SendTimeout - check this reference - wonderful and relevant explanation: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/

    0 讨论(0)
  • 2020-11-27 13:43

    Under the Tools menu in Visual Studio 2008 (or 2005 if you have the right WCF stuff installed) there is an options called 'WCF Service Configuration Editor'.

    From there you can change the binding options for both the client and the services, one of these options will be for time-outs.

    0 讨论(0)
  • 2020-11-27 13:55

    In addition to the binding timeouts (which are in Timespans), You may also need this as well. This is in seconds.

    <system.web>
        <httpRuntime executionTimeout="600"/><!-- = 10 minutes -->
    
    0 讨论(0)
提交回复
热议问题