WCF 服务引发某些类型的异常
本文关键字:类型 异常 服务 WCF | 更新日期: 2023-09-27 17:56:09
我 service.in 数据协定创建了一个 WCF 我有两个属性:
[DataMember]
Private User objUser;
和
[DataMember]
Private tempClass ObjTemp;
我为这两个属性提供了获取和设置属性。在我的实现类中,我有一个数据合同类的对象...比方说。 objData
.
当我分配时
objData.ObjTemp=(function which return objTemp);
服务工作正常。但是,当我分配时。
objData.objUser=(function which return objUser)
它抛出以下错误:
基础连接已关闭:连接已关闭 竟然。
当我发表评论时
objData.objUser=(function which return objUser)
它再次工作正常。
当我检查 User 类中的代码时,我发现一个属性会产生问题。当我更改该属性的属性时,它也可以正常工作;但我不知道为什么该属性会产生问题。
属性是这样的:
public IPAddress IP { get; set; }
现在,这个 IPAdress 类包含一个构造函数,并为 ip 变量获取和设置。在get中,它只是返回ip变量。
在设置中,它检查某些条件,然后将值分配给IP变量。如果条件失败,则会引发异常。谁能解释一下问题可能是什么?
我刚刚检查了另一件事。
如果我从private User objUser;
中删除[DataMember]
属性,它可以正常工作; 但是如果我[DataMember]
放回去,它会生成相同的错误。
有什么建议吗?
很可能会发现objUser
不可序列化。有关详细信息,请阅读以下内容:MSDN:使用数据协定
引用其中的一小段话:
所有 .NET Framework 基元类型(如整数和字符串)以及某些被视为基元的类型(如 DateTime 和 XmlElement)都可以序列化,无需其他准备,并被视为具有默认数据协定。您创建的新复杂类型必须具有数据协定,才能序列化。
还可以考虑使用 Microsoft 中的服务跟踪查看器工具来帮助跟踪您遇到的确切问题。
编辑:
如果它是您正在谈论的 System.Net.IPAddress 对象,则它被标记为 [Serializable]
,但它没有默认的无参数构造函数,这是使用 DataContractSerializer(用于通过 WCF 边界序列化数据对象)时的必要要求之一。您可能还希望确保,如果 WCF 调用中使用的任何自定义对象包含任何其他自定义对象(在属性中,如 IPAddress),则使用 KnownType 属性修饰这些对象。
因此,作为一种解决方案,您可以编写自己的 IPAddress 类,该类可以很好地与 DataContractSerializer 配合使用,也可以切换到在 WCF 调用中使用 XmlSerializer。