WCF实体相关错误:远程终结点不再能识别此序列。这很可能是由于远程终结点上发生中止

本文主要是介绍WCF实体相关错误:远程终结点不再能识别此序列。这很可能是由于远程终结点上发生中止,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目中,服务端获取数据填充List后,通过WCF传递到Business的Proxy.cs时报错如下:
System.ServiceModel.CommunicationException:“远程终结点不再能识别此序列。这很可能是由于远程终结点上发生中止。WSRM:Identifier 的值不是已知的序列标识符。 可靠会话出错。”

经查代码,发现服务端代码并无问题。而问题出现在实体类中。

[Serializable]
[DataContract]
public class PatientInfo
{[DataField("SEX")][DataMember]public EnumSex Sex { get; set; }/// <summary>/// 性别代码/// </summary>[DataMember]public int SexCode { get { return Sex.GetHashCode(); } }
}

以上代码,发现如果修改为

		/// <summary>/// 性别代码/// </summary>[Display(Name = "SexCode", Description = "性别代码")][DataMember]public int SexCode { get { return 1; } }

依然会报此错误。因此推测使用WCF在服务端和客户端传递属性时候,使用 [DataMember] 标记的数据契约必须声明 Set 方法,未声明 Set 方法将抛出异常。

如下加上set即可

[DataMember]
public int SexCode { get { return Sex.GetHashCode(); }set{} }

当然如果发现我们实际也不需要传递这个属性的时候,那就直接把[DataMember]标记去掉就不会报错了。如下

public int SexCode { get { return Sex.GetHashCode(); } }

关于Enum枚举类型,如果操作不当也会出现类似问题,如下
请添加图片描述

原因,经查代码得知,没有给0默认值,这样一般常会出现未赋值的情况,则必定报错。
请添加图片描述

处理方式:
1.加上标记:默认值不序列化 [DataMember(EmitDefaultValue=false)](不建议)

// 当属性值为默认值时,不会参与序列化。
[DataMember(EmitDefaultValue=false)]
public EnumSex Sex { get; set; }

2.枚举必须给默认值0(强烈建议)

wcf相关文章:
知识宝典之介绍WCF数据契约
WCF三大契约使用说明
只读字段的WCF DataMember属性?

这篇关于WCF实体相关错误:远程终结点不再能识别此序列。这很可能是由于远程终结点上发生中止的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/650209

相关文章

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

如何正确识别一台POE交换机的好坏? 选购可靠的POE交换机注意事项

《如何正确识别一台POE交换机的好坏?选购可靠的POE交换机注意事项》POE技术已经历多年发展,广泛应用于安防监控和无线覆盖等领域,需求量大,但质量参差不齐,市场上POE交换机的品牌繁多,如何正确识... 目录生产标识1. 必须包含的信息2. 劣质设备的常见问题供电标准1. 正规的 POE 标准2. 劣质设

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

SpringBoot3匹配Mybatis3的错误与解决方案

《SpringBoot3匹配Mybatis3的错误与解决方案》文章指出SpringBoot3与MyBatis3兼容性问题,因未更新MyBatis-Plus依赖至SpringBoot3专用坐标,导致类冲... 目录SpringBoot3匹配MyBATis3的错误与解决mybatis在SpringBoot3如果