WCF:要使用什么超时属性?

时间:2009-09-23 06:13:12

标签: c# .net wcf

我有一段像这样的代码

            NetTcpBinding binding = new NetTcpBinding(SecurityMode.Transport);
            binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
            binding.CloseTimeout = new TimeSpan(0, 0, 1);
            binding.OpenTimeout = new TimeSpan(0, 0, 1);
            binding.SendTimeout = new TimeSpan(0, 0, 1);
            binding.ReceiveTimeout = new TimeSpan(0, 0, 1);

            EndpointAddress endPoint = new EndpointAddress(new Uri(clientPath));

            DuplexChannelFactory<Iservice> channel = new DuplexChannelFactory<Iservice>(new ClientCallBack(clientName), binding, endPoint);
            channel.Ping() 

当端点不存在时,它会在抛出EndpointNotFoundException之前等待20秒。

奇怪的是,当我更改了SendTimeout时,异常消息发生了变化 连接尝试持续的时间跨度为00:00:20到.... 01但仍然需要20秒才能抛出异常!

如何更改此超时?

2 个答案:

答案 0 :(得分:0)

我认为这与WCF无关,因为每当您尝试连接到任何非现有端点时,操作系统的TCP / IP层肯定会经历一些步骤,以便首先找到DNS(如果基于名称的主机),以及然后尝试连接到IP端点,这样TCP / IP层的默认超时时间为20秒,即使你在IE的地址栏上输入任何不存在的url,如果它连接到互联网,它也会等待几秒钟在给你页面之前无法显示错误。我认为TCP / IP堆栈的超时无法从WCF控制。

答案 1 :(得分:0)

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d

有关WCF超时旋钮的摘要说明。您可能希望在调用Ping()之前显式调用channel.Open(),以便从“发送第一个消息”部分中解除“打开会话”部分。那就是说,另一个答案(关于在TCP工作中发生的事情)可能是对的,我忘了。