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

相关文章

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx