增加WCF服务中的超时值
如何在WCF服务上将默认超时时间增加到大于1分钟?
你是指服务器端还是客户端?
对于一个客户端,你需要调整绑定元素的sendTimeout属性。 对于某个服务,您可能需要调整绑定elemnent的receiveTimeout属性。
<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> ....
当然,您必须将您想要的端点映射到特定的绑定。
在Visual Studio 2008(或2005,如果你有正确的WCF东西安装)的工具菜单下有一个选项称为“WCF服务configuration编辑器”。
从那里您可以更改客户端和服务的绑定选项,其中一个选项将用于超时。
不同的超时意味着不同的事情。 当你在客户端上工作时,你可能主要看SendTimeout – 检查这个参考 – 精彩和相关的解释: http : //social.msdn.microsoft.com/Forums/en-US/wcf/thread / 84551e45-19a2-4d0d-bcc0-516a4041943d /
你可以select两种方式:
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)通过Web服务器中的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>
欲了解更多详情查看官方文件
在绑定上configuration超时值
WSHttpBinding类