WCF 配置文件中的MaxStringContentLength & MaxReceivedMessageSize
中午测试员在测试系统模块时发现无法通过WCF从服务器下载数据,检查配置文件后,建议开发人员修改站点的WEB.CONFIG文件,具体修改对比如下:
旧的:
<binding name="BasicHttpBinding_ICentaMiddleService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
新的:
<binding name="BasicHttpBinding_ICentaMiddleService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="9223372036854775807"
messageEncoding="Text" textEncoding="utf-8" transferMode="Streamed"
useDefaultWebProxy="true">
<readerQuotas maxDepth="6553500" maxStringContentLength="2147483647"
maxArrayLength="6553500" maxBytesPerRead="6553500" maxNameTableCharCount="6553500" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
注意这里修改的主要是maxReceivedMessageSize这个属性,解决了从服务器通过WCF下载大容量数据的问题。
下午测试人员继续测试,发现无法将数据通过WCF保存回服务器端。检查数据后发现,需要被保存的数据超过9K,而WCF服务器端使用的是binding="basicHttpBinding"这个数据绑定方式。思路打开,则应该是由于服务器端的接收的数据大小有限制。
当初次引用服务后,显示的服务器端binding="basicHttpBinding" 的最大上传数据容量是:
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
注意是maxStringContentLength="8192" ,那么判定,是由于绑定的默认值未被修改的缘故。接着修改服务器端的web.config配置文件。修改对比如下:
旧的:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="CVMTransactionCaseServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="AuthTaxTransactionInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="DealingTransactionInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="HousePassTransactionInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="PreAuthTransactionInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="PropertyApplyInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="CommonInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="CenterAssignServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="CentaLine.CVM.Services.CVMTransactionCaseService" behaviorConfiguration="CVMTransactionCaseServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="CentaLine.CVM.Services.ICVMTransactionCaseService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
<service name="CentaLine.CVM.Services.AuthTaxTransactionInfoService" behaviorConfiguration="AuthTaxTransactionInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="CentaLine.CVM.Services.IAuthTaxTransactionInfoService"/>
</service>
<service name="CentaLine.CVM.Services.DealingTransactionInfoService" behaviorConfiguration="DealingTransactionInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="CentaLine.CVM.Services.IDealingTransactionInfoService"/>
</service>
<service name="CentaLine.CVM.Services.HousePassTransactionInfoService" behaviorConfiguration="HousePassTransactionInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="CentaLine.CVM.Services.IHousePassTransactionInfoService"/>
</service>
<service name="CentaLine.CVM.Services.PreAuthTransactionInfoService" behaviorConfiguration="PreAuthTransactionInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="CentaLine.CVM.Services.IPreAuthTransactionInfoService"/>
</service>
<service name="CentaLine.CVM.Services.PropertyApplyInfoService" behaviorConfiguration="PropertyApplyInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="CentaLine.CVM.Services.IPropertyApplyInfoService"/>
</service>
<service name="CentaLine.CVM.Services.CommonInfoService" behaviorConfiguration="CommonInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="CentaLine.CVM.Services.ICommonInfoService"/>
</service>
<service name="CentaLine.CVM.Services.CenterAssignService" behaviorConfiguration="CenterAssignServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="CentaLine.CVM.Services.ICenterAssignService"/>
</service>
</services>
</system.serviceModel>
新的:
<system.serviceModel>
<!--<behaviors />-->
<bindings>
<basicHttpBinding>
<binding name="NewBinding0" maxReceivedMessageSize="6553600">
<readerQuotas maxStringContentLength="6553600" />
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="CVMTransactionCaseServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="AuthTaxTransactionInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="DealingTransactionInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="HousePassTransactionInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="PreAuthTransactionInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="PropertyApplyInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="CommonInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="CenterAssignServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="CentaLine.CVM.Services.CVMTransactionCaseService"behaviorConfiguration="CVMTransactionCaseServiceBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="NewBinding0"contract="CentaLine.CVM.Services.ICVMTransactionCaseService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
<service name="CentaLine.CVM.Services.AuthTaxTransactionInfoService"behaviorConfiguration="AuthTaxTransactionInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="NewBinding0"contract="CentaLine.CVM.Services.IAuthTaxTransactionInfoService"/>
</service>
<service name="CentaLine.CVM.Services.DealingTransactionInfoService"behaviorConfiguration="DealingTransactionInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="NewBinding0"contract="CentaLine.CVM.Services.IDealingTransactionInfoService"/>
</service>
<service name="CentaLine.CVM.Services.HousePassTransactionInfoService"behaviorConfiguration="HousePassTransactionInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="NewBinding0"contract="CentaLine.CVM.Services.IHousePassTransactionInfoService"/>
</service>
<!--<service name="CentaLine.CVM.Services.PreAuthTransactionInfoService" behaviorConfiguration="PreAuthTransactionInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="CentaLine.CVM.Services.IPreAuthTransactionInfoService"/>
</service>-->
<service name="CentaLine.CVM.Services.PreAuthTransactionInfoService"behaviorConfiguration="PreAuthTransactionInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="NewBinding0"
contract="CentaLine.CVM.Services.IPreAuthTransactionInfoService" />
<!--<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8080/service" />
</baseAddresses>
</host>-->
</service>
<service name="CentaLine.CVM.Services.PropertyApplyInfoService"behaviorConfiguration="PropertyApplyInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="NewBinding0"contract="CentaLine.CVM.Services.IPropertyApplyInfoService"/>
</service>
<service name="CentaLine.CVM.Services.CommonInfoService"behaviorConfiguration="CommonInfoServiceBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="NewBinding0"contract="CentaLine.CVM.Services.ICommonInfoService"/>
</service>
<service name="CentaLine.CVM.Services.CenterAssignService"behaviorConfiguration="CenterAssignServiceBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="NewBinding0"contract="CentaLine.CVM.Services.ICenterAssignService"/>
</service>
</services>
</system.serviceModel>
主要添加内容:
<bindings>
<basicHttpBinding>
<binding name="NewBinding0" maxReceivedMessageSize="6553600">
<readerQuotas maxStringContentLength="6553600" />
</binding>
</basicHttpBinding>
</bindings>
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="NewBinding0"
contract="CentaLine.CVM.Services.IPreAuthTransactionInfoService" />
最后单元测试,通过!爽!
WCF 配置文件中的MaxStringContentLength & MaxReceivedMessageSize的更多相关文章
- 在WCF程序中动态修改app.config配置文件
今天在个WCF程序中加入了修改配置文件的功能.我是直接通过IO操作修改的app.config文件内容,修改后发现发现其并不生效,用Google搜了一下,在园子里的文章动态修改App.Config 和w ...
- WCF配置文件与文件下载之坎坷路
题外话:本以为我会WCF了,精通WCF了,毕竟刚做过一个WCF的项目,不就是写写契约接口,然后实现接口,改下配置.最后用控制台或者服务发布一下,不就能用了.不就是简单ABC吗?不是So Easy吗?做 ...
- [转]使用代码去描述WCF配置文件
转自:使用代码去描述WCF配置文件 在应用程序部署的时候,WCF客户端因为服务器地址的变化,需要修改程序配置文件的地址URL,手动修改很不方便,还会造成错误,所以尽量把描述WCF配置文件的配置使用代码 ...
- WCF 配置文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.S ...
- 使用WCF服务的客户端出现maxReceivedMessageSize异常
使用WCF服务的客户端出现maxReceivedMessageSize异常解决方案 当使用WCF的客户端调取的数据过多时,会出现这个异常.一般情况下,系统默认值是65536,大约容纳100-200条左 ...
- WCF 配置文件(三)
配置文件概述 WCF服务配置是WCF服务编程的主要部分.WCF作为分布式开发的基础框架,在定义服务以及定义消费服务的客户端时,都使用了配置文件的方法.虽然WCF也提供硬编程的方式,通过在代码中直接设置 ...
- WCF技术剖析之二十: 服务在WCF体系中是如何被描述的?
原文:WCF技术剖析之二十: 服务在WCF体系中是如何被描述的? 任何一个程序都需要运行于一个确定的进程中,进程是一个容器,其中包含程序实例运行所需的资源.同理,一个WCF服务的监听与执行同样需要通过 ...
- 总结WCF开发中遇到的几个问题
最近的项目,需要用到WCF,在以前的工作中,经常是将WCF托管在IIS中,主要有几下几个原因: 第一:部署非常方便,和部署一个站点没什么区别: 第二:不受防火墙的影响,因为一般服务 ...
- Entity Framework 6 Recipes 2nd Edition(9-7)译->在WCF服务中序列化代理
9-7. 在WCF服务中序列化代理 问题 从一个查询里返回一个动态代理对象,想要把它序列为一个POCO(Plain-Old CLR Objects)对象. 实现基于POCO实体对象, 在运行时,EF会 ...
随机推荐
- CSS之背景设置、字体设置、文本设置
<html> <head> <meta charset="utf-8"> <title>单行文本框与多行文本框</title& ...
- vue中数据接收成功,页面渲染失败
1.vue中数据接收成功,页面渲染失败.代码如下 经过查找资料修改代码为 或是 原因是: 由于 JavaScript 的限制, Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如: ...
- 394 Decode String 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串.编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数.你可以认 ...
- Lind.DDD.DynamicModules动态模块化的设计
回到目录 在Lind.DDD框架里有Module,主要用于全局自动添加的模块,它类似于ABP系统里的Module,但有时过于自动化了可能使系统太死板,而有时将需要的模块手动载入可能对我们更合适,所以大 ...
- Roslyn导致发布网站时报错:编译失败
最近新升级了Visual Studio 2017,创建的Web项目Bin目录中多了一个叫roslyn的文件夹,该文件夹导致网站在某些服务器上发布出错 从网上搜索了一下,Roslyn是新出的动态编译工具 ...
- CF814B An express train to reveries
思路: 模拟,枚举. 实现: #include <iostream> using namespace std; ; int a[N], b[N], cnt[N], n, x, y; int ...
- es6之Proxy,Reflect
Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写. var proxy = new Proxy(ta ...
- Android基础TOP6_1:FrameLyayout和ImageView制作层叠图片
Activity: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- ajax的底层前后台交互
为什么用ajax或者它的优点: 异步加载数据,无需切换页面 更加的用户体验,局部刷新,及时验证,操作步骤简化: 节省流量 js控制数据的加载,更加灵活多用. 底层就是XMLHttpRequest对象: ...
- Ubuntu-Python2.7安装 scipy,numpy,matplotlib
sudo apt-get install python-scipy sudo apt-get install python-numpy sudo apt-get install python-matp ...