WCF的代码实例网上到处都是,但是在实际的使用过程中总会出现很多问题,我就我在项目中使用WCF碰到的问题做个总结:
(注:要看到服务端真正异常配置includeExceptionDetailInFaults="true")
一。现象:界面假死不抛出任何异常(按常理超过等待时间应该抛出超时异常但是没有抛出不知道是什么原因)或抛出超时异常。
代码环境:WinForm+netTcpBinding。
原因分析:因为netTcpBinding和wsHttpBinding都是有状态连接所以造成这种现象可能是没有及时释放资源或当前会话数超过maxConcurrentSessions配置节配置数。basicHttpBinding是无状态连接所以不存在此问题
解决方法:及时释放资源,增大maxConcurrentSessions配置数
二。现象:超时异常。
代码环境:WinForm+netTcpBinding
原因分析:造成这个现象会有很多原因1.接受信息长度超过maxReceivedMessageSize配置节配置数。2.返回数组长度超过 maxArrayLength配置节配置数。3.返回字节数超过maxBytesPerRead配置节配置数。4.返回字符串长度超过maxStringContentLength配置节配置数。5.获取表名称的字符数超过maxNameTableCharCount配置节配置数。
6.可序列化的项数超过maxItemsInObjectGraph配置节配置数。例如你要返回或接受一个有10个T,T包含有5个属性(基本类型)组成的List<T>或是一个有10行5列DataTable组成的DataSet,它们分别有50项。如果没有加大maxItemsInObjectGraph配置节的配置数很容易在返回较大列表时出现这个错误,当然应当使用分页或分批返回列表尽量避免传递过大列表
解决方法:根据实际情况设定相应的配置节,或是采用续传,分页等合理的手段避免超限