原文:WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭

在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而由于WCF服务的特殊性,调试起来也不是那么方便,因此往往会花费不少时间来进行跟踪处理。本文介绍我在我在我的框架里面使用WCF服务的时候,出现的一个常见错误的处理方法,它的提示信息是:基础连接已经关闭: 连接被意外关闭。这种情况我碰到的有两种,一种是返回DataTable的时候出现的,一种是返回实体类类中带有枚举类型的情况,下面分别对它们的处理进行介绍。

1、DataTable返回值出现错误

一般情况下,我们在设计WCF接口返回值的时候,都使用实体类或者实体类列表这种方式,但是有时候也可能需要返回一个DataTable的数据类型,如果按照下面的方式构造函数内容并返回,就可能出现错误。

定义接口

        /// <summary>/// 根据查询条件,返回记录到DataTable集合中/// </summary>/// <param name="condition">查询条件</param>/// <param name="pagerInfo">分页条件</param>/// <returns></returns>
        [OperationContract]DataTable FindToDataTableWithPager(string condition, ref PagerInfo pagerInfo);

实现函数,为了方便演示,填写了简单的测试代码。

        /// <summary>/// 根据条件查询数据库,并返回对象集合(用于分页数据显示)/// </summary>/// <param name="condition">查询的条件</param>/// <param name="info">分页实体</param>/// <returns>指定对象的集合</returns>public DataTable  FindToDataTableWithPager(string condition, ref PagerInfo pagerInfo){//测试代码DataTable dt = new DataTable();dt.Columns.Add("Test");for (int i = 0; i < 10; i++){dt.Rows.Add(new object[] { "Test" + i });}return dt;}

测试的时候,会发现出现错误

如果你按照它的提示,你可能搔破头皮也不知道具体是哪里的问题,这个地方其实很有意思,就是因为序列号DataTable的时候,没有TableName导致的,如果把函数体的实现里面,为返回的DataTable对象的TableName属性赋值一个值就可以了。

        /// <summary>/// 根据条件查询数据库,并返回对象集合(用于分页数据显示)/// </summary>/// <param name="condition">查询的条件</param>/// <param name="info">分页实体</param>/// <returns>指定对象的集合</returns>public  DataTable  FindToDataTableWithPager(string condition, ref PagerInfo pagerInfo){//测试代码DataTable dt = new DataTable();dt.Columns.Add("Test");for (int i = 0; i < 10; i++){dt.Rows.Add(new object[] { "Test" + i });}dt.TableName = "test";return dt;}

测试之后,就发现能够顺利执行了。

2、实体类中含有枚举类型导致的错误

实体类定义,定义了一个枚举的对象ApplyStatus

    /// <summary>/// 流程申请单/// </summary>
    [DataContract]public class ApplyInfo : BaseEntity{  ......../// <summary>/// 当前状态(0:处理中,1:已完成,2:已退回,3:已撤消)(其它值为非法值)/// </summary>
        [DataMember]public virtual ApplyStatus Status{get{return this.m_Status;}set{this.m_Status = value;}}}

枚举的定义一般情况如果设置如下代码:

    /// <summary>/// 表单当前处理状态。/// 当前状态(0:处理中,1:已完成,2:已退回,3:已撤消)(其它值为非法值)/// </summary>
    [DataContract]public enum ApplyStatus{/// <summary>/// 处理中 = 0/// </summary>处理中 = 0,/// <summary>/// 已完成 = 1/// </summary>已完成 = 1,/// <summary>/// 已退回 = 2/// </summary>已退回 = 2,/// <summary>/// 已撤消 =3/// </summary>已撤消 = 3}

然后定义WCF服务接口和实现代码。

WCF接口定义

        /// <summary>/// 根据条件查询数据库,并返回对象集合(用于分页数据显示)/// </summary>/// <param name="condition">查询的条件</param>/// <param name="info">分页实体</param>/// <returns>指定对象的集合</returns>
        [OperationContract]List<T> FindWithPager(string condition, ref PagerInfo info);

WCF服务接口实现

        /// <summary>/// 根据条件查询数据库,并返回对象集合(用于分页数据显示)/// </summary>/// <param name="condition">查询的条件</param>/// <param name="info">分页实体</param>/// <returns>指定对象的集合</returns>public List<ApplyInfo> FindWithPager(string condition, ref PagerInfo info){return bll.FindWithPager(condition, info);}

那么通过WCF服务获取这个对象的信息时候,就会出现错误:基础连接已经关闭: 连接被意外关闭

出现错误的原因,是因为枚举类型序列化出现了错误,需要在枚举的值里面增加[EnumMember]的声明,如下所示。

    [DataContract]public enum ApplyStatus{/// <summary>/// 处理中 = 0/// </summary>
        [EnumMember]处理中 = 0,/// <summary>/// 已完成 = 1/// </summary>
        [EnumMember]已完成 = 1,/// <summary>/// 已退回 = 2/// </summary>
        [EnumMember]已退回 = 2,/// <summary>/// 已撤消 =3/// </summary>
        [EnumMember]已撤消 = 3}

再次编译运行并测试,最后的结果就是能够正常解析了。

以上就是我们在开发WCF的时候,经常碰到的一些错误的解决方式,希望大家在开发WCF并进行调用的时候,碰到类似的问题,能够很好解决问题,节省宝贵的时间。

WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭相关推荐

  1. eclipse的web项目出现莫名红色感叹号和红叉的且项目中无任何错误的解决方法

    如图:添加了多余的构造函数,删掉即可

  2. JAVA Web项目中所出现错误及解决方式合集(不断更新中)

    JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...

  3. kafka集群中常见错误的解决方法:kafka.common.KafkaException: Should not set log end offset on partition

    kafka集群中常见错误的解决方法:kafka.common.KafkaException: Should not set log end offset on partition 参考文章: (1)k ...

  4. springboot jar中没有主清单属性_Spring Boot 常见错误及解决方法

    导读 Spring Boot 作为 Java 生态中最流行的开发框架,意味着被数以万计的开发者所使用.下面根据我们自身遇到的问题,加上用户提供的一些反馈,来大致梳理下 Spring Boot 的常见错 ...

  5. 稳定性专题 | Spring Boot 常见错误及解决方法

    导读 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测.故障演练.JVM.应用容器.服务框架.流量调度.监控.诊断等多个技术领域,以更结构化的 ...

  6. centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课...

    centos linux 系统日常管理4  scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法  第十七节课 rsync可以增量同步,scp不行 ...

  7. 安装oracle 10g闪退,Windows 7安装Oracle 10g常见错误及解决方法

    Windows 7安装Oracle 10g常见错误及解决方法 在安装之前,我们要先下载相应的版本. 点击:Oracle 10g支持Win7版 错误A: 正在检查操作系统要求... 要求的结果: 5.0 ...

  8. 【安全】Kerberos相关问题进行故障排除| 常见错误和解决方法

    1.概述 转载 为了学习:Kerberos相关问题进行故障排除| 常见错误和解决方法 2.总结 可以用来帮助诊断Kerberos相关问题的原因并实施解决方案的指南. 3. 症状 单击症状链接转到相应的 ...

  9. tuxedo错误码6_TUXEDO启动常见错误和解决方法

    TUXEDO启动常见错误和解决方法 如果TUXEDO配置的有问题,在启动的时候,会有各种报错信息来提示,请看下面: 1 tmboot: internal error: CMDTUX_CAT:4578: ...

最新文章

  1. 字符编码笔记:ASCII,Unicode和UTF-8
  2. ABAP performance学习笔记
  3. JavaScript实现permutate Without Repetitions无重复排列算法(附完整源码)
  4. :网页设计与重构那些事儿
  5. MySql—索引原理
  6. python中的pip是什么_python中的pip
  7. oracle零碎要点---ip地址问题,服务问题,系统默认密码问题
  8. iOS 播放Gif动画
  9. python基础之进程、线程、协程篇
  10. 【侯捷】C++内存管理机制
  11. 统计学习方法——概述
  12. 大年三十问候导师的后果
  13. delphi第三方组件总述
  14. JavaScript - 通过居民身份证号码获取年龄和性别(函数封装)
  15. python 偏态分布调整_如何处理偏态数据
  16. 状态机FSM的输出如何避免毛刺?
  17. 剖析拒绝服务攻击-SYN拒绝服务(转)
  18. Linux光盘检测,Linux下如何检测DVD刻录机的设备
  19. Robomaster视觉组成长之路
  20. 被百度 AI 官方认证的大学,到底是什么水平?

热门文章

  1. ppt 胡事民 计算机图形学_从相机标定到SLAM,极简三维视觉六小时课程视频(附PPT)...
  2. cli能记日志web不能php,ThinkPHP6.0日志变化
  3. Java语言所有异常类均继承自_要继承自定义异常类的继承方式必须使用 ( ) 关键字_学小易找答案...
  4. 分区怎么4k对齐_电脑升级SSD后,依然卡顿怎么解决?
  5. 最快学习之Vue Route
  6. [Perforce]password (P4PASSWD) invalid or unset. 的错误解决
  7. [过年菜谱之]红烧甲鱼
  8. c语言 调用父类方法,关于C++:如何从派生类函数调用父类函数?
  9. html画布实现小球沿直线下落,[面向对象的案例]在canvas画布内实现小球的随机移动...
  10. docker-compose搭建ghost博客系统