RIA服务WCF超时
我有一个用Silverlight 3.0编写的应用程序。它使用RIA服务在客户端和服务器之间进行通信。RIA服务WCF超时
我的问题似乎没有在网上回答得很好。客户端使用RIA服务与服务器通信,后者在后台使用WCF。如果通信时间超过60秒,则会通过此消息超时,
'查询'ApplyUpgrade'的加载操作失败。 HTTP请求'http://localhost:52403/ClientBin/DatabaseUpgradeTool-Web-UpgradePackageDomainService.svc/binary'已超出分配的超时时间。分配给此操作的时间可能是更长时间的一部分。
我的服务器正在执行数据库升级,所以它的有效时间超过60秒。可能是双倍或三倍。
我想这样的设置在web.config,
<services>
<service name="DatabaseUpgradeTool.Web.UpgradePackageDomainService">
<endpoint address="" binding="wsHttpBinding" contract="DatabaseUpgradeTool.Web.UpgradePackageDomainService"></endpoint>
<endpoint address="/soap" binding="basicHttpBinding" contract="DatabaseUpgradeTool.Web.UpgradePackageDomainService"></endpoint>
<endpoint address="/binary" binding="customBinding" bindingConfiguration="BinaryHttpBinding" contract="DatabaseUpgradeTool.Web.UpgradePackageDomainService"></endpoint>
</service>
</services>
<bindings>
<customBinding>
<binding name="BinaryHttpBinding"
receiveTimeout="00:00:10"
sendTimeout="00:00:10"
openTimeout="00:00:10"
closeTimeout="00:00:10">
<binaryMessageEncoding />
<httpTransport keepAliveEnabled="true"/>
</binding>
</customBinding>
</bindings>
仍然没有喜悦。任何想法,以什么是我上面尝试过什么是错的?我期望以上,导致它在10秒内超时,而不是60.
谢谢。
不知道这会帮助,我还没有超时配置尝试过,但它可能为你指明正确的方向: http://blogs.objectsharp.com/CS/blogs/dan/archive/2010/04/13/maxitemsinobjectgraph-wcf-ria-services-exception.aspx
我面临同样的问题,我贴这个问题的答案问题在这里:Silverlight 4 WCF RIA Service Timeout Problem
下面是答案:
我会解释我的背景,我希望它会为我工作。我很确定。
首先调用RIA服务,并使用一些领域的背景下,我的例子:
EmployeeDomainContext context = new EmployeeDomainContext();
InvokeOperation<bool> invokeOperation = context.GenerateTMEAccessByEmployee(1, 'Bob');
invokeOperation.Completed += (s, x) =>
{....};
没有新东西,直到这里。与此同时,我每次在1分钟后都面临同样的超时异常。我花了很多时间试图去面对如何改变超时定义,我尝试了Web.config中的所有可能的改变,而没有做任何改变。解决的办法是:
创建CustomEmployeeDomainContext,即在生成的代码的相同路径localizated的局部类和此类中使用的钩方法OnCreate中改变创建域上下文的行为。在这堂课你应该写:
public partial class EmployeeDomainContext : DomainContext
{
partial void OnCreated()
{
PropertyInfo channelFactoryProperty = this.DomainClient.GetType().GetProperty("ChannelFactory");
if (channelFactoryProperty == null)
{
throw new InvalidOperationException(
"There is no 'ChannelFactory' property on the DomainClient.");
}
ChannelFactory factory = (ChannelFactory)channelFactoryProperty.GetValue(this.DomainClient, null);
factory.Endpoint.Binding.SendTimeout = new TimeSpan(0, 10, 0);
}
}
我期待您的反馈。
请注意以上更新的问题。我在web.config中尝试了一些设置,但它们并没有奏效。它可能引发一些其他的见解 – peter 2010-02-09 21:20:21
看看[相同的问题](http://stackoverflow.com/questions/1912762/configuring-the-timeout-for-a-wcf-ria-services-call-from-a -silverlight -3-客户端) – Timores 2010-08-09 10:16:34