【问题标题】:WCF: what timeout property to use?WCF:使用什么超时属性?
【发布时间】:2009-09-23 06:13:12
【问题描述】:

我有一段这样的代码

            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() 

当端点不存在时,它仍然会等待 20 秒,然后再抛出 EndpointNotFoundException。

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

如何更改此超时时间?

【问题讨论】:

    标签: c# .net wcf


    【解决方案1】:

    我认为这与 WCF 无关,因为每当您尝试连接到任何不存在的端点时,操作系统的 TCP/IP 层肯定会通过一些步骤首先找出 DNS 是否基于其名称的主机,并且然后尝试连接到 IP 端点,在此 TCP/IP 层将默认超时 20 秒,即使您在 IE 的地址栏上键入任何不存在的 url,如果它连接到互联网,它将等待几秒钟之前给你的页面不能显示错误。而且我认为那是 TCP/IP 堆栈的超时,这是 WCF 无法控制的。

    【讨论】:

    • 打开超时肯定包括任何操作系统和网络持续时间吗?我想不出 Open timeout 可能对控制有用的任何其他延迟。
    【解决方案2】:

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

    WCF 超时旋钮的简要说明。您可能希望在调用 Ping() 之前显式调用 channel.Open(),以便从“发送第一条消息”部分中区分“打开会话”部分。也就是说,另一个答案(关于 TCP 层发生的事情)可能是正确的,我忘记了。

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多