Dela via


Konfigurera tidsgränsvärden för en bindning

Det finns ett antal tillgängliga timeout-inställningar i WCF-bindningar. Om du ställer in de här timeout-inställningarna på rätt sätt kan du förbättra inte bara tjänstens prestanda utan också spela en roll i användbarheten och säkerheten för din tjänst. Följande timeouter är tillgängliga för WCF-bindningar:

  1. OpenTimeout

  2. CloseTimeout

  3. SendTimeout

  4. ReceiveTimeout

Tidsgränser för WCF-bindning

Var och en av de inställningar som beskrivs i det här avsnittet görs på själva bindningen, antingen i kod eller konfiguration. Följande kod visar hur du programmatiskt anger tidsgränser för en WCF-bindning i kontexten för en lokalt installerad tjänst.

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

I följande exempel visas hur du konfigurerar tidsgränser för en bindning i en konfigurationsfil.

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

Mer information om de här inställningarna finns i dokumentationen Binding för klassen.

Tidsgränser på klientsidan

På klientsidan:

  1. SendTimeout – används för att initiera OperationTimeout, som styr hela processen för att skicka ett meddelande, inklusive att ta emot ett svarsmeddelande för en begäran/svarstjänståtgärd. Den här tidsgränsen gäller även när du skickar svarsmeddelanden från en återanropskontraktsmetod.

  2. OpenTimeout – används när kanaler öppnas när inget explicit timeout-värde har angetts.

  3. CloseTimeout – används när kanaler stängs när inget explicit timeout-värde har angetts.

  4. ReceiveTimeout – används inte.

Tidsgränser på tjänstsidan

På tjänstsidan:

  1. SendTimeout, OpenTimeout och CloseTimeout är samma som på klienten.

  2. ReceiveTimeout – används av Service Framework Layer för att initiera tidsgränsen för sessionsinaktivt som styr hur länge en session kan vara inaktiv innan tidsgränsen uppnås.