Como aumentar o tempo limite padrão para mais de 1 minuto em um serviço WCF?
Como aumentar o tempo limite padrão para mais de 1 minuto em um serviço WCF?
Respostas:
Você está se referindo ao servidor ou ao cliente?
Para um cliente, você deseja ajustar o atributo sendTimeout de um elemento de ligação. Para um serviço, você deseja ajustar o atributo receiveTimeout de uma ligação elenente.
<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>
....
Obviamente, você precisa mapear o terminal desejado para essa ligação específica.
receiveTimeout
lado do servidor, governa a determinação da ociosidade para ligações baseadas em sessão. Por exemplo, o servidor não usará essa configuração para ligações basicHTTP. Você tem que rolar seus próprios limites de tempo de processamento do lado do servidor para WCF
No menu Ferramentas do Visual Studio 2008 (ou 2005, se você tiver o material certo do WCF instalado), há uma opção chamada 'Editor de configuração de serviço do WCF'.
A partir daí, você pode alterar as opções de ligação para o cliente e os serviços, uma dessas opções será para tempos limite.
Tempos diferentes significam coisas diferentes. Quando você está trabalhando no cliente ... provavelmente está olhando principalmente para o SendTimeout - verifique esta referência - explicação maravilhosa e relevante: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread / 84551e45-19a2-4d0d-bcc0-516a4041943d /
Você pode escolher duas maneiras:
1) Por código no cliente
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) Pelo WebConfig em um servidor web
<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>
Para mais detalhes, veja as documentações oficiais
Além dos tempos limite de ligação (que estão em Timespan
s), você também pode precisar disso. Isso é em segundos.
<system.web>
<httpRuntime executionTimeout="600"/><!-- = 10 minutes -->