怎样才能让WCF服务端定时上送大数据技术应用是什么到客...

WCF传输数据量的能力受到许多因素的制约,如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置

1、MaxReceivedMessageSize:获取或设置配置了此绑定的通道上可以接收的消息的最大大小。

网上许多地方说应同时设置MaxBufferSize(获取或设置缓冲区的最大大小,该缓冲区用于接收来自通道的消息。),根据MSDN上的解释:

“MaxBufferSize 属性的值及其重要性有所不同,这取决于是否在接收消息的通道上对消息进行缓冲或流处理:

可见,对于默认的缓冲传输,设置该属性是不必要的。

2、ReaderQuotas:获取或设置可由配置了此绑定的终结点处理的 SOAP 消息的复杂性约束。

3、MaxItemsInObjectGraph:获取对象图中要序列化或反序列化的最大项数。

以上是传输大数据量时可能需要设置的属于WCF的几个属性,示例代码中大多将属性值设置为允许的最大值,但设置后并不能保证WCF一定具有传输如此大数据量的能力。另外,这些属性一般需要在服务端和客户端同时设置,但如果使用Silverlight客户端,部分属性如ReaderQuotas并不被支持。

使用以上配置进行测试,从WCF端获取1000万条长度为10的字符串是成功的。每个长度为10的字符串编码后约占32个字节,如此算来,成功传输的数据已经超过300M了,算得上不小的数字了,如果数据量比这还要大的话,怕是网速已经不能满足要求了,这时需要考虑其他的解决方案。



当客户端传输的参数中有字节流或者是长度过大的时候,wcf就会报错。出现maxReceivedMessageSize异常解     当使用WCF的客户端调取的数据过多时,会出现这个异常。一般情况下,系统默认值是65536,大约容纳100-200条左右的数据。 那么就需要我们手动改参数WebConf ...( 17:41:21)







在从客户端向WCF服务端传送较大数据(>65535B)的时候,发现程序直接从Reference的BeginInvoke跳到EndInvoke,没有进入服务端的Service实际逻辑中,怀疑是由于数据过大超出限定导致的。 问题是我实际发送的数据是刚刚从WCF服务端接收过来的,一来一去,数据量差别并不 ...( 10:23:21)



在从客户端向WCF服务端传送较大数据(>65535B)的时候,发现程序直接从Reference的BeginInvoke跳到EndInvoke, 没有进入服务端的Service实际逻辑中,怀疑是由于数据过大超出限定导致的。 问题是我实际发送的数据是刚刚从WCF服务端接收过来的,一来一去,数 ...( 09:32:19)



在从客户端向WCF服务端传送较大数据(>65535B)的时候,发现程序直接从Reference的BeginInvoke跳到EndInvoke,没有进入服务端的Service实际逻辑中,怀疑是由于数据过大超出限定导致的。 问题是我实际发送的数据是刚刚从WCF服务端接收过来的,一来 ...( 15:53:18)





WCF目前用在应用之间通信也是一种比较好的技术。 之前做一个项目用到了WCF,找了本书,按部就班的写了个WCF服务,写完之后开始还可以,可以是后来突然出现了一个长度不够的问题。查了一下资料发现WCF客户端和服务 之间传输数据是有大小限制的,默认的大小只有64kb,如果大小超过这个设置就需 ...( 22:51:05)



又是一个把自己架在火上烤的需求啊,

如果不考虑传输因素,可以调整wcf配置,提升传递的容量,如果是对象传递可能还要调整对象层次的深度

参考资料

 

随机推荐