在我的silverlight应用程序中调用启用Silverlight的WCF服务,偶尔会有用户超时。什么是最简单的方法来增加服务客户端允许响应的时间?
抛出的确切异常是:System.TimeoutException:[HttpRequestTimedOutWithoutDetail]
由于
答案 0 :(得分:12)
这可以在silverlight应用程序中的ServiceReference.ClientConfig文件的节点中设置。
答案 1 :(得分:4)
这里接受的答案对我不起作用。相反,我必须将基本通道转换为IContextChannel,并在其上设置OperationTimeout。
为此,我不得不创建一个带有部分类的新文件,该文件与ServiceReference的名称相匹配。在我的情况下,我有一个PrintReportsService。代码如下。
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,但此帖子中的代码段无法编译。
答案 2 :(得分:1)
这可以设置,但是有一个上限由底层HTTP库定义(我认为它是五分钟)。请注意,使用较高的值将回退到上限。另外,请注意您可能还需要在服务器上配置超时。
答案 3 :(得分:1)
我通过在IE中启用兼容模式来修复此问题
答案 4 :(得分:0)
我认为您应该从Silverlight应用程序实现对服务器的基于计时器的回调,而不是更改超时,以便会话不会过期。这将消除所有应用程序更长时间超时的开销。