WCF大数据传输
来源:互联网 发布:互联网进入大数据时代 编辑:程序博客网 时间:2024/05/22 03:09
一、影响因素
WCF传输数据的能力受到许多因素的制约,如果程序中出现需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置。
1. MaxReceivedMessageSize
可以接收的消息的最大大小。对于缓冲传输(TransferMode设置为Buffered),MaxBufferSize的值应始终等于MaxReceivedMessageSize的值。示例代码:
2. ReaderQuotas
处理的SOAP消息的复杂性约束。一般需要设置该属性的MaxArrayLength、MaxStringContentLength及MaxDepth属性。示例代码:
3. MaxItemsInObjectGraph
要序列化和反序列化的最大项数。该属性属于DataContractSerializer类。示例代码:
4. MaxRequestLength
请求的最大大小。WCF传输数据量的能力还受到HttpRuntime设置的制约。示例代码:
二、注意事项
1. 查看WCF错误信息
将如下代码加入到服务端的配置文件中,错误信息将输出到指定路径。
<system.diagnostics>
<sources>
<sourcename="System.ServiceModel"switchValue="Warning"propagateActivity="true">
<listeners>
<addname="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<addname="xml"type="System.Diagnostics.XmlWriterTraceListener"initializeData="d:\wcf.svclog" />
</sharedListeners>
</system.diagnostics>
2. 在服务端添加服务,通过Endpoint与客户端关联
3.更新服务将导致客户端Endpoint的behaviorConfiguration配置丢失
4.更新服务失败
提示错误如图:
解决此问题,需要至少在服务端的配置中存在如下代码:
与此错误相关的其他原因,此处不做说明。
三、以PDPWcfService为实例进行配置
1. 客户端配置
<system.serviceModel>
<bindings>
<basicHttpBinding>
<bindingname="basicHttpBinding"closeTimeout="00:10:00"
openTimeout="00:10:00"receiveTimeout="00:10:00"sendTimeout="00:10:00"
allowCookies="false"bypassProxyOnLocal="false"hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647"maxBufferPoolSize="2147483647"maxReceivedMessageSize="2147483647"
messageEncoding="Text"textEncoding="utf-8"transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotasmaxDepth="64"maxStringContentLength="2147483647"maxArrayLength="2147483647"
maxBytesPerRead="2147483647"maxNameTableCharCount="2147483647" />
<securitymode="None">
<transportclientCredentialType="None"proxyCredentialType="None"
realm="" />
<messageclientCredentialType="UserName"algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behaviorname="endpointBehavior">
<dataContractSerializermaxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behaviorname="serviceBehavior">
<dataContractSerializermaxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<client>
<endpointname="BasicHttpBinding_IPDPWcfService"address="http://localhost:1002/PDPWcfService.svc"
binding="basicHttpBinding"contract="PDPWcfServiceProxy.IPDPWcfService"
bindingConfiguration="basicHttpBinding"behaviorConfiguration="endpointBehavior" />
</client>
</system.serviceModel>
2. 服务端配置
<system.serviceModel>
<bindings>
<basicHttpBinding>
<bindingname="basicHttpBinding"closeTimeout="00:10:00"
openTimeout="00:10:00"receiveTimeout="00:10:00"sendTimeout="00:10:00"
allowCookies="false"bypassProxyOnLocal="false"hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647"maxBufferPoolSize="2147483647"maxReceivedMessageSize="2147483647"
messageEncoding="Text"textEncoding="utf-8"transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotasmaxDepth="64"maxStringContentLength="2147483647"maxArrayLength="2147483647"
maxBytesPerRead="2147483647"maxNameTableCharCount="2147483647" />
<securitymode="None">
<transportclientCredentialType="None"proxyCredentialType="None"
realm="" />
<messageclientCredentialType="UserName"algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behaviorname="endpointBehavior">
<dataContractSerializermaxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behaviorname="serviceBehavior">
<dataContractSerializermaxItemsInObjectGraph="2147483647"/>
</behavior>
<!--保留下面的配置,否则不能更新服务 BEGIN-->
<behaviorname="">
<serviceMetadatahttpGetEnabled="true" />
<serviceDebugincludeExceptionDetailInFaults="false" />
</behavior>
<!--保留下面的配置,否则不能更新服务 END-->
</serviceBehaviors>
</behaviors>
<services>
<servicename="RongCheng.ZhiJiaoPingTai.PDP.WcfService.PDPWcfService">
<endpointname="BasicHttpBinding_IPDPWcfService"address=""
binding="basicHttpBinding"contract="RongCheng.ZhiJiaoPingTai.PDP.WcfService.IPDPWcfService"
bindingConfiguration="basicHttpBinding"behaviorConfiguration="endpointBehavior" />
</service>
</services>
<serviceHostingEnvironmentmultipleSiteBindingsEnabled="true" />
</system.serviceModel>
3.传输大数据实例
请参见同级目录的“20130529 WCF传输大数据实例.rar”。
- WCF - 大数据传输
- WCF大数据传输
- WCF大数据传输
- WCF 大数据传输问题
- WCF大数据传输
- wcf list 大数据传输 传输对象过多
- 大数据传输下的WCF配置
- WCF全双工数据传输
- flex wcf 数据传输
- 大数据传输
- WCF 项目应用连载[7] - 绑定、服务、行为 大数据传输与限流 - 上
- WCF 项目应用连载[8] - 绑定、服务、行为 大数据传输与限流 - 下 (ServiceThrottlingAttribute)
- [WCF 学习笔记] 8. 数据传输
- webservice大数据传输
- Kafka大数据传输配置
- WCF数据传输配置文件参数的设置说明
- wcf大数据异常
- WCF上传大文件
- 级联菜单
- i2c 驱动编程接口
- DLL+ ActiveX控件+WEB页面调用例子
- 端午假期结束,新的征程开始
- C/C++函数调用规则
- WCF大数据传输
- C#令人惊喜的泛型委托Predicate、Func、Action
- .NET实现之(ActiveX插件开发)
- 详解Linux系统修改环境变量PATH路径的方法
- 为移动而设计:交互设计篇
- Linux VNC黑屏(转)
- VS2010下写驱动和MFC,设置及编译问题
- vc++/c++ 汉字取拼音首字母
- 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件的解决方案