WCF流模式传输下采用NetTcpBinding

  最近刚接触WCF,在项目中采用NetTcpBinding绑定运用流模式传输文件过程中,出现“套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致”这个错误,上网查找了很久也没能很好的解决,一般的解决方案都是更换一种绑定协议,比如WSHttpBinding或者basicHttpBinding。可是由于实际情况又不能随意更换绑定协议,而且更换协议后出现其他的问题,所以一直不甘心。后来在博客园的一个博问中看到一个启发(具体是哪个提问现在已经找不到了,但是是受了dudu老大的启发),就是在App.config配置文件中,添加如下配置:

<system.diagnostics>
<sources>
    <source name="System.ServiceModel" switchValue="Warning" propagateActivity="true">
    <listeners>
        <add name="xml" />
    </listeners>
    </source>
</sources>
<sharedListeners>
    <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="d:\temp\wcf.svclog" />
</sharedListeners>
</system.diagnostics>

将具体的错误记录在.svclog文件中,这样设置之后果然在日志文件中提示这个错误:缓冲处理XML内容所需的大小超出了缓冲区配额。然后百度将XmlDictionaryReaderQuotas.MaxStringContentLength属性设置足够大就可以了。但是,有时候这样设置后还是不管用,还需要设置服务端MaxBufferSize属性。这样在流模式(Streamed)传输下使用NetTcpBinding绑定协议出现的【套接字连接已中止】的问题就解决了。

  由此,得出一个结论,在刚开始接触WCF遇到问题时应该打开思路而不是局限于错误提示本身,因为在很多情况下,该错误是由于某一个具体的问题导致的,但是给出的提示却是一个比较笼统的文字说明,这个时候就需要透过表现看本质了。由于自己刚开始接触WCF,这过程中遇到很多问题和困难,也走了一些弯路,所以这个问题的解决过程给了一个很好的解决问题的思路!

  另外,在项目中还遇到其他问题,这里也一一列举出来,有些问题没有给出解决方案,这里只是记录下来,以后随着对WCF的更加深入再来完善。

1、“XXX”不支持正在使用的.net组祯模式。有关详细信息,请参阅服务器日志。

  这个问题一般是在NetTcpBinding绑定下,服务端和客户端配置信息不一致导致的。当时出现的原因是服务端配置文件的终结点中未设置bindingConfiguration属性值,而客户端对Binding进行了自定义设置导致的。这个问题涉及到WCF 4.0的新特性,对于.net 3.5,服务端配置文件中的netTcpBinding/binding节点下的name属性是必须的,否则在服务寄宿的时候会提示“找不到必须的属性name”,而在.net 4.0中该name属性可以不用设置,但是如果不设置则采用默认绑定信息,这样设置后客户端也要按照相同的设置(采用默认绑定信息),否则在服务调用时会出现上面的问题。

2、无法分配XXX字节的托管内存缓冲区。可用内存量可能不足。

  这个问题是在使用缓冲模式(Buffered)下上传文件过大时出现的,后来采用流模式(Streamed)传输后就可以了。

3、通道在关闭时接收到意外的输入消息,Action “XXX”只应在不再需要任何消息时关闭通道。

4、此通道已无法再用于发送消息,因为输出会话由于启动的服务器关机而自动关闭。通过DispatchRuntime.  AutomiclnputSessionShutdown设置为false来禁用自动关闭,或者考虑使用远程服务器修改关机协议。

  以上两个问题是调试服务端提前中断调试后客户端收到的异常信息。

时间: 2024-10-12 10:43:29

WCF流模式传输下采用NetTcpBinding的相关文章

WCF分布式开发步步为赢(11):WCF流处理(Streaming)机制

WSE3.0框架提供了数据优化传输机制,WSE3.0构建Web服务安全(4):MTOM消息传输优化和文件上传.下载 疑问里进行了介绍.WCF同样也提供了流操作来支持大数据对象的传输和处理优化机制,今天我们WCF分布式开发步步为赢系列的(4):使用流操作(Streaming Operations)优化传输.本节会详细介绍流操作的相关概念.编程实现过程,以及实际开发过程中需要主要的一些问题.本节结构:[1]流处理的概念[2]流处理的特点[3]示例代码分析[4]总结.最后上传本文的示例代码. Stre

WCF分布式开发步步为赢(4):WCF服务可靠性传输配置与编程开发

今天继续WCF分布式开发步步为赢系列的第4节:WCF服务可靠性传输配置与编程开发.这个章节,我们要介绍什么是WCF服务的可靠性传输,随便介绍网络协议的概念,Web Service为什么不支持可靠性传出,具体的WCF绑定协议和可靠性的关系,实现可靠性传输有什么方式,以及配置和开发的详细实现代码分析部分.[1]可靠性传输[2]配置方式实现可靠性传输[3]编程方式实现可靠性传输[4]编程实现必备有序传递[5]结果分析和总结. 下面进入正式的内容: [1]可靠性传输: [1.0]网络协议基础知识: 这里

流式传输的两大主流种类及流式传输特点

转自:http://blog.csdn.net/hguisu/article/details/7418087 流式传输定义很广泛,现在主要指通过网络传送媒体(如视频.音频)的技术总称.其特定含义为通过Internet 将影视节目传送到PC机.实现流式传输有两种方法:实时流式传输(Realtime streaming)和顺序流式传输(progressive streaming).(百度百科) 在网络上传输音/视频(英文缩写A/V)等多媒体信息目前主要有下载和流式传输两种方案.A/V文件一般都较大,

WCF基础之传输

WCF中使用的主要传输的方式有HTTP,TCP和命名管道. 绑定包括可选的协议绑定元素(如安全),必需的编码绑定元素和必须的传输协定绑定元素三个部分,而由传输方式则是由传输绑定元素来决定的. HTTP是客户端与服务器之间的一个请求/响应协议,不是基于连接的(即不需要建立通信会话),如果通信双方都是WCF,则建议使用TCP和命名管道通信. TCP是与HTTP相反,它是基于连接的,且TCP提供可靠传输(TCP通知发送方开始传递包,保证按发送时同样的顺序传递这些包,传输丢失的包和确保数据包不重复),W

[转]Net 下采用GET/POST/SOAP方式动态调用WebService C#实现

本文转自:http://www.cnblogs.com/splendidme/archive/2011/10/05/2199501.html 一直以来,我们都为动态调用WebService方法而烦恼.在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出错,似乎要重新绑定Webservice并重新编译后才能再次运行.我无意中通过百度搜索找了一个采用GET/POST/SOAP方式动态调用WebService的

互联网影音Steam流式传输-网络直播点播

什么是stream流式传输 流式传输定义很广泛,现在主要指通过网络传送流媒体(如视频.音频)的技术总称.其特定含义为通过Internet 将影视节目传送到PC机,移动端Pad,安卓手机,苹果手机及网络机顶盒(OTT-TV或IPTV的具体应用). 我们也常见一个词"串流",也就是流式传输的一种形象说法.就是指一连串的影像资料压缩后,经过网络分析分段传送资料,在网络上即时传输影音以供观赏的一种技术和过程:串流传输可传送现场live影音或预存与服务器上的影片,当观看者在收看这些影音档时,影音

&lt;转&gt;WCF实例化模式与高并发处理

WCF实例化模式与高并发控制 1.实例化模式InstanceModel 1.1 PerCall:单调模式 每次调用都会产生一个实例 例[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)] 1.2 PerSession会话模式 每次调用都有同一个服务进行处理 [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)] 1.3 SingleT

跟我学设计模式视频教程——管擦者模式(下),责任链模式(上)

课程视频 观察者模式(下) 责任链模式(上) 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 跟我学设计模式视频教程--管擦者模式(下),责任链模式(上),布布扣,bubuko.com

18.6 负载均衡集群介绍;18.7 LVS介绍;18.9 LVS NAT模式搭建(上);18.10 LVS NAT模式搭建(下)

扩展: lvs 三种模式详解 http://www.it165.net/admin/html/201401/2248.html lvs几种算法 http://www.aminglinux.com/bbs/thread-7407-1-1.html 关于arp_ignore和 arp_announce http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html lvs原理相关的   http://blog.csdn.net/pi9nc/