WCF+Restfull服务 提交或获取数据时数据大小限制问题解决方案
2013-06-26 21:49
393 查看
近日在使用wcf的restfull架构服务时遭遇到了提交大数据的问题。
大数据包含两种情形:
1)单条数据量过大。
2)提交或获取的数据条数过多。
在测试时发现,默认设置下当单条JSON数据大于30K时服务便不予受理。
提交或获取数据大小的限制来自两方面,即IIS服务和WCF服务。
这两方面的限制都可以通过配置WCF服务端的Web.config相关配置节点的方式解决。
废话不说了,直接上解决方案。
未配置的原始Web.config
已配置的Web.config
1)system.web节点:
2)system.serviceModel节点下“webHttpEndpoint”的配置:
name可以随意取。
数据大小设置部分不说了。
helpEnabled属性:设置为true时则可以在服务URL后+/help的方式查看服务列表。
如服务地址:http://localhost:9900/MapService.svc
查看服务方式:http://localhost:9900/MapService.svc/help
如下图:
3)system.serviceModel节点下“service”的配置:
behaviorConfiguration 内容与behavior节点中的相应名称一致。
此处Endpoint节点中contract要和描述服务结构的接口名一致。
其他的不多说了自悟。
着重参考:《已配置的Web.config》
南京酷得软件- 陈朕
大数据包含两种情形:
1)单条数据量过大。
2)提交或获取的数据条数过多。
在测试时发现,默认设置下当单条JSON数据大于30K时服务便不予受理。
提交或获取数据大小的限制来自两方面,即IIS服务和WCF服务。
这两方面的限制都可以通过配置WCF服务端的Web.config相关配置节点的方式解决。
废话不说了,直接上解决方案。
未配置的原始Web.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="BaseConnectionString" connectionString="server=.\SQLEXPRESS;database=TLPBizF;uid=*******;pwd==*******;" providerName="System.Data.SqlClient" /> <add name="BizDBConnectionString" connectionString="server=.\SQLEXPRESS;database=TLPBizDB;uid==******;pwd==*******;" providerName="System.Data.SqlClient" /> </connectionStrings> <appSettings> <add key="TimeOutMinutes" value="20" /> <add key="BizDBName" value="TLPBizDB"/> <add key="aspnet:MaxJsonDeserializerMembers" value="1500000000" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> <handlers accessPolicy="Read, Execute, Script" /> <staticContent> <mimeMap fileExtension=".svc" mimeType="application/octet-stream" /> </staticContent> </system.webServer> </configuration>
已配置的Web.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="BaseConnectionString" connectionString="server=.\SQLEXPRESS;database=TLPBizF;uid=*******;pwd==*******;" providerName="System.Data.SqlClient" /> <add name="BizDBConnectionString" connectionString="server=.\SQLEXPRESS;database=TLPBizDB;uid==*******;;pwd==*******;" providerName="System.Data.SqlClient" /> </connectionStrings> <appSettings> <add key="TimeOutMinutes" value="20" /> <add key="BizDBName" value="TLPBizDB"/> <add key="aspnet:MaxJsonDeserializerMembers" value="1500000000" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.0" /> <httpRuntime maxRequestLength="2147483644"/> </system.web> <system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="2147483644"/> </webServices> </scripting> </system.web.extensions> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="false" /> <dataContractSerializer maxItemsInObjectGraph="2147483647"/> </behavior> <behavior name="BigDataServiceBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> <dataContractSerializer maxItemsInObjectGraph="2147483647"/> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> <standardEndpoints> <webHttpEndpoint> <!-- 服务节点配置 --> <standardEndpoint name="BigDataServiceEndPoint" transferMode="Buffered" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" defaultOutgoingResponseFormat="Json" helpEnabled="true" automaticFormatSelectionEnabled="true"> <readerQuotas maxDepth="64" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxArrayLength="2147483647" ></readerQuotas> </standardEndpoint> </webHttpEndpoint> </standardEndpoints> <services> <!-- 服务对应配置 --> <service name="SFiresoft.TLP.Services.BizCoreService" behaviorConfiguration="BigDataServiceBehavior"> <endpoint endpointConfiguration="BigDataServiceEndPoint" kind="webHttpEndpoint" contract="SFiresoft.TLP.Services.IBizCoreService" > </endpoint> </service> </services> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> <handlers accessPolicy="Read, Execute, Script" /> <staticContent> <mimeMap fileExtension=".svc" mimeType="application/octet-stream" /> </staticContent> </system.webServer> </configuration>对比:
1)system.web节点:
<httpRuntime maxRequestLength="2147483644"/>应对IIS服务请求数据大小限制的设置。
2)system.serviceModel节点下“webHttpEndpoint”的配置:
<standardEndpoint name="MyPoint" transferMode="Buffered" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" defaultOutgoingResponseFormat="Json" helpEnabled="false" automaticFormatSelectionEnabled="true"> <readerQuotas maxDepth="64" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxArrayLength="2147483647" ></readerQuotas> </standardEndpoint>此处:
name可以随意取。
数据大小设置部分不说了。
helpEnabled属性:设置为true时则可以在服务URL后+/help的方式查看服务列表。
如服务地址:http://localhost:9900/MapService.svc
查看服务方式:http://localhost:9900/MapService.svc/help
如下图:
3)system.serviceModel节点下“service”的配置:
<services> <service name="SFiresoft.TLP.Services.BizCoreService" behaviorConfiguration="Wcf4BigData.Web.BigDataServiceBehavior"> <endpoint endpointConfiguration="MyPoint" kind="webHttpEndpoint" contract="SFiresoft.TLP.Services.IBizCoreService"> </endpoint> </service> </services>Service name设置同实现服务的类名一致。
behaviorConfiguration 内容与behavior节点中的相应名称一致。
此处Endpoint节点中contract要和描述服务结构的接口名一致。
其他的不多说了自悟。
着重参考:《已配置的Web.config》
南京酷得软件- 陈朕
相关文章推荐
- WCF+Restfull服务 提交或获取数据时数据大小限制问题解决方案
- WCF+Restfull服务 提交或获取数据时数据大小限制问题解决方案
- WCF RestFull提交数据超出限额解决方法
- 解决kindeditor中ajax提交表单无法获取数据的问题
- 解决Volley框架下JsonObjectRequest以POST提交数据,服务端无法获取数据的问题。
- 解决Volley框架下JsonObjectRequest以POST提交数据,服务端无法获取数据的问题。
- Java 简单解决springmvc获取properties文件里面中文内容出现论码问题(我遇到的问题是数据提交检验时返回的错误提示出现乱码)
- java后台设置可跨域访问,前端ajax获取json数据,解决浏览器限制跨域访问的问题
- Keil 生成HEX时数据大小限制问题解决办法
- 在ASP.NET MVC 中宿主WCF Rest 服务的问题及解决方法
- 通过JS向表单中增加元素后提交无法获取数据问题的解决。
- Weka中数据挖掘与机器学习系列之Weka Package Manager安装所需WEKA的附加算法包出错问题解决方案总结(八)
- tomcat7以上,ajax post参数后台获取不到的问题,post参数大小不能大于2M的解决办法!
- 页面编码为GBK时 jquery 提交ajax数据完美解决中文乱码方案
- asp.net web api 解决ajax跨站点post请求提交 json 数据问题
- 解决Jquery下拉框数据动态获取的问题
- WCF SqlParameter序列化问题解决方案
- Android向Rest服务Post数据遇到的Date类型数据问题
- 本地发布Web API数据服务接口时,无法访问服务接口问题的解决
- $.ajax获取不到数据问题解决