长时间运行的WCF调用的Silverlight 4客户端超时

时间:2010-11-16 15:55:27

标签: silverlight

您好我有Silverlight客户端超时问题试过

TimeSpan getSessionMapTimout = new TimeSpan(0, 20, 0);

Client.Endpoint.Binding.CloseTimeout = getSessionMapTimout;
Client.Endpoint.Binding.ReceiveTimeout = getSessionMapTimout;
Client.Endpoint.Binding.SendTimeout = getSessionMapTimout;
Client.Endpoint.Binding.OpenTimeout = getSessionMapTimout;
Client.InnerChannel.OperationTimeout = getSessionMapTimout;

选项包括InnerChannel.OperationTimeout,其中任何一个都无法在30秒内超时运行Silverlight客户端。

有趣的是IE regestry设置"ReceiveTimeout"=dword:00007530似乎覆盖了Silverlight客户端设置,因为如果我从注册表中删除它,一切正常。

如何在Silverlight中使用这些超时并覆盖IE注册表设置。

3 个答案:

答案 0 :(得分:0)

你使用什么样的约束?我一次使用双面打印几小时/天,没有问题。

您是否检查过服务器端的超时?还要考虑ASP.NET连接超时(我认为它默认设置为30秒或更长时间)。

答案 1 :(得分:0)

我发现,使用IE外部的客户端堆栈(在浏览器外模式下),超过10秒的请求会因来自HttpWebRequest.EndGetResponse()的ArgumentNullException而失败。从我在网上看到的情况来看,其他人也在Firefox和Chrome中经历过这种情况,但在IE中似乎工作得很好(可能是它无限期等待,你可以自己动作超时)。

我不相信客户端堆栈中有用于设置超时的API。

答案 2 :(得分:-1)

如果需要延长超时,则需要在Silverlight中使用Client Http堆栈。 Silverlight使用的标准浏览器堆栈具有浏览器设置的超时,您无法对其进行操作。

HttpWebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);

这会将所有Http注册到客户端堆栈上。但是,使用此方法有一些限制。 This page有一个很好的图表,显示了两个堆栈之间的区别。