significado - wcf vs web api
Aumentar el valor de tiempo de espera en un servicio WCF (4)
¿Te refieres al lado del servidor o al lado del cliente?
Para un cliente, le conviene ajustar el atributo sendTimeout de un elemento de enlace. Para un servicio, le conviene ajustar el atributo receiveTimeout de un elemento vinculante.
<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>
....
Por supuesto, debe asignar su punto final deseado a ese enlace en particular.
¿Cómo aumento el tiempo de espera predeterminado a más de 1 minuto en un servicio WCF?
Diferentes tiempos de espera significan cosas diferentes. Cuando trabajas en el cliente ... probablemente estés mirando SendTimeout en su mayoría - consulta esta referencia - explicación maravillosa y relevante: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/
En el menú Herramientas en Visual Studio 2008 (o 2005 si tiene las cosas correctas de WCF instaladas) hay una opción llamada ''Editor de configuración de servicio WCF''.
Desde allí puede cambiar las opciones de enlace tanto para el cliente como para los servicios, una de estas opciones será para los tiempos de espera.
Puedes elegir dos formas:
1) Por código en el 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) Por WebConfig en un 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 más detalles ver la documentación oficial