打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
WCF+Restfull服务 提交或获取数据时数据大小限制问题解决方案
近日在使用wcf的restfull架构服务时遭遇到了提交大数据的问题。

    大数据包含两种情形:

    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”的配置:

<standardEndpointname="MyPoint"transferMode="Buffered"maxBufferSize="2147483647"maxReceivedMessageSize="2147483647"defaultOutgoingResponseFormat="Json"helpEnabled="false"automaticFormatSelectionEnabled="true"><readerQuotasmaxDepth="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要和描述服务结构的接口名一致。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
FastReport创建托管在windows服务中的WCF服务
WCF之旅(1):创建一个简单的WCF程序
WCF配置文件全攻略
基于WS-AtomicTransaction标准的WCF远程分布式事务
无废话WCF入门教程四[WCF的配置文件]
第一讲:WCF介绍
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服