WCF传输数据量大的问题

解决方案:WCF承载项目的web.config里添加

<dataContractSerializer maxItemsInObjectGraph="2147483647" />

<behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
         <FONT color=red> <dataContractSerializer maxItemsInObjectGraph="2147483647" /></FONT>
        </behavior>
      </serviceBehaviors>
</behaviors>

以下是相关资料:
http://bbs.csdn.net/topics/390322439?page=1#post-393257147
http://www.cnblogs.com/Mainz/archive/2011/09/23/2186284.html
http://kevinfan.blog.51cto.com/1037293/293828
http://www.cnblogs.com/wayfarer/archive/2007/08/24/867987.html

原文地址:http://bbs.silverlightchina.net/forum.php?mod=viewthread&tid=16706

网上有很多网友提问超时的问题,,,也有很多网友回答,,,但是很官方,,,

我也是网上提问的silverlight菜鸟之一,,,这个问题后来算是解决了,,,

在此留个脚印,希望对有同样疑问的人有所帮助。。。

先介绍一下我的开发环境,,,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

2、还有一种超时问题,上面的方法不能解决。

  应用场景是: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>
4、没有了,如果还有问题可以和我联系,一起探讨

  在此也送上一句官方回答:超时引起的原因有很多种,建议你打开WCF log以及使用fiddler监视网络

原创欢迎转载,请注明作者,并保留此段声明,且在文章页面明显位置给出原文连接

http://www.cnblogs.com/youfan/archive/2011/06/09/2076094.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值