|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
前几天同学问我学习方向的问题。有点想法,不知道对不对,怕误导同学,现在“开源一下”。注:括号内是我现在整理的时填加上的。WCF能够匡助我们用来传输数据。可是有无人碰到过必要年夜容量数据传输的需求呢?只需举行准确的设置就能够完成WCF传输年夜数据。
在从客户端向WCF服务端传送较年夜数据(>65535B)的时分,发明程序间接从Reference的BeginInvoke跳到EndInvoke,没有进进服务真个Service实践逻辑中,嫌疑是因为数据过年夜超越限制招致的。
成绩是我实践发送的数据是方才从WCF服务端吸收过去的,一来一往,数据量不同其实不年夜。
然后发明,在客户端和服务端实践利用的是分歧的设置,关于客户端,在增加ServiceReference时主动天生的ServiceReferences.ClientConfig文件中system.serviceModel节下有如许的设置完成WCF传输年夜数据:
<bindings>
<basicHttpBinding>
<bindingname="BasicHttpBinding_WcfService"
maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<securitymode="None"/>
</binding>
</basicHttpBinding>
</bindings>然后在Client节里使用Binding
Configuration:
<client>
<endpointaddress="http://
localhost:22000/Service/WcfService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_WcfService"
contract="WcfServiceReference.WcfService"
name="BasicHttpBinding_WcfService"/></client>
在Binding里指定了最年夜缓存字节数和最年夜承受字节数,相称于2G的巨细!除非传一整套一连剧,通常为够用了。
而在服务端,Web.config文件里,Bindings节是空的,而Service也没有指定bindingConfiguration属性,那末它们接纳的就是默许的65535的巨细。
成绩找到,办理WCF传输年夜数据就对照简单了:
在Bindings节增加新的Binding设置,指定最年夜承受数据:
<bindings>
<basicHttpBinding>
<bindingname="LargeDataTransferServicesBinding"
maxReceivedMessageSize="2147483647"
messageEncoding="Text"transferMode="Streamed"
sendTimeout="00:10:00"/>
</basicHttpBinding>
</bindings>以后给响应的Service
指定bindingConfiguration属性:
<servicebehaviorConfiguration=
"Server.Service.WcfServiceBehavior"
name="Server.Service.WcfService">
<endpointaddress=""binding=
"basicHttpBinding"bindingConfiguration=
"LargeDataTransferServicesBinding"
contract="Server.Service.WcfService"/>
<endpointaddress="mex"binding=
"mexHttpBinding"contract="IMetadataExchange"/>
</service>
如许就能够从客户端发送充足年夜的数据了。
P.S.:
.net默许只能传4M的文件,以是只管设定了Wcf两头的设置,仍是超不出.net的限制,以是假如要传输年夜文件,还必要在System.Web节下加上
<httpRuntimemaxRequestLength="102400"/>
这里的单元是KB,如许就能够传100M的文件了,充实办理了WCF传输年夜数据的成绩。固然,这么年夜的文件,最好仍是分段传输对照好。
.net默许只能传4M的文件,以是只管设定了Wcf两头的设置,仍是超不出.net的限制,以是假如要传输年夜文件,还必要在System.Web节下加上
<httpRuntimemaxRequestLength="102400"/>
这里的单元是KB,如许就能够传100M的文件了,充实办理了WCF传输年夜数据的成绩。固然,这么年夜的文件,最好仍是分段传输对照好。
倡议不要传输过年夜的数据,由于大概形成你的收集梗塞。
可怜的程序员,还是逃不出移植的命运! |
|