先介绍一下开发环境,,,Silverlight 4 + DomainService(WCF RIA,不是WCF)
(网上的回答大多基于WCF的方式,和WCF RIA二者还是有区别的,但这种区别大多被回答者自动忽视)
1、一般解决的方法是去修改OpenTimeout,ReceiveTimeout,SendTimeout,CloseTimeout
Public Sub ChangeWcfSendTimeout(ByVal context As DomainContext,ByVal Timeout As TimeSpan)
Dim channelFactoryProperty As PropertyInfo = context.DomainClient.GetType().GetProperty("ChannelFactory")
If channelFactoryProperty Is nothing Then
Throw New InvalidOperationException(
"There is no 'ChannelFactory' property on the DomainClient.")
End If
Dim factory As ChannelFactory = CType(channelFactoryProperty.GetValue(context.DomainClient,nothing),ChannelFactory)
factory.Endpoint.Binding.OpenTimeout = Timeout
factory.Endpoint.Binding.ReceiveTimeout = Timeout
factory.Endpoint.Binding.SendTimeout = Timeout
factory.Endpoint.Binding.CloseTimeout = Timeout
End Sub
应用场景是:SL调用存储过程返回一个Entity,返回的数据量不大,问题在于这个存储过程执行需要时间,必须要修改 TransactionTimeOut
<serviceBehaviors>
<serviceTimeouts transactionTimeout="00:06:00"/>
<serviceBehaviors>
3、相关上面的场景,存储过程执行的时候,也有一个设定超时的属性,在少数情况下也会导致超时
'Initializes a new FPDB object Inherits ObjectContext using the connection string
Public Sub New()
MyBase.New("name=FPDBConn","FPDBConn")
MyBase.ContextOptions.LazyLoadingEnabled = True
Me.CommandTimeout = 360
OnContextCreated()
End Sub
4、还有一种伪超时,因为后来证明,并不是超时问题,而是SL的序列化的size是有限制的
应用场景:有一个应用依据选择的日期,去数据库读数据,当日期范围不大,返回的数据量比较少时,没有问题。
当选择的日期范围比较大,返回的数据超过临界值时,就会报Not found错误
<behavior> <dataContractSerializer maxItemsInObjectGraph="2147483647"/> </behavior>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。