代码之家  ›  专栏  ›  技术社区  ›  NikolaiDante

Silverlight异步超时错误

  •  13
  • NikolaiDante  · 技术社区  · 17 年前

    引发的确切异常是:System.TimeoutException:[HttpRequestTimedOutWithoutDetail]

    谢谢

    5 回复  |  直到 17 年前
        1
  •  12
  •   NikolaiDante    17 年前

    这可以在silverlight应用程序的ServiceReference.ClientConfig文件的节点中设置。

        2
  •  4
  •   Rick Arthur    16 年前

    这里被接受的答案对我不起作用。相反,我必须将基本通道强制转换为IContextChannel,并在其上设置OperationTimeout。

    为此,我必须创建一个带有分部类的新文件,该分部类与ServiceReference的名称匹配。就我而言,我有一个PrintReports服务。代码如下。

    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    
    namespace RecipeManager.PrintReportsService 
    {
        public partial class PrintReportsClient : System.ServiceModel.ClientBase<RecipeManager.PrintReportsService.PrintReports>, RecipeManager.PrintReportsService.PrintReports 
        {
            public void SetOperationTimeout(TimeSpan timeout)
            {
                ((System.ServiceModel.IContextChannel)base.Channel).OperationTimeout = timeout;
            }
    
    
        }
    }
    

    然后,在创建客户端时,我会执行以下操作:

            PrintReportsService.PrintReportsClient client = new RecipeManager.PrintReportsService.PrintReportsClient();
            client.SetOperationTimeout(new TimeSpan(0, 4, 0));
    

    那是为了我!更多信息可用 here

        3
  •  1
  •   Shawn Wildermuth    17 年前

    这是可以设置的,但有一个上限是由底层HTTP库定义的(我认为是五分钟)。请注意,使用更高的值将回落到上限。另外,请注意,您可能还需要在服务器上配置超时。

        4
  •  1
  •   Matthew Hall    16 年前

    我通过在IE中启用兼容模式修复了这个问题

        5
  •  0
  •   Donut    15 年前

    我认为您应该从Silverlight应用程序实现对服务器的基于计时器的回调,而不是更改超时,这样会话就不会过期。这将消除所有应用程序较长超时的开销。