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]放回去,它会生成相同的错误。

有什么建议吗?

WCF 服务引发某些类型的异常

很可能会发现objUser不可序列化。有关详细信息,请阅读以下内容:MSDN:使用数据协定

引用其中的一小段话:

所有 .NET Framework 基元类型(如整数和字符串)以及某些被视为基元的类型(如 DateTime 和 XmlElement)都可以序列化,无需其他准备,并被视为具有默认数据协定。您创建的新复杂类型必须具有数据协定,才能序列化。

还可以考虑使用 Microsoft 中的服务跟踪查看器工具来帮助跟踪您遇到的确切问题。


编辑:

如果它是您正在谈论的 System.Net.IPAddress 对象,则它被标记为 [Serializable] ,但它没有默认的无参数构造函数,这是使用 DataContractSerializer(用于通过 WCF 边界序列化数据对象)时的必要要求之一。您可能还希望确保,如果 WCF 调用中使用的任何自定义对象包含任何其他自定义对象(在属性中,如 IPAddress),则使用 KnownType 属性修饰这些对象。

因此,作为一种解决方案,您可以编写自己的 IPAddress 类,该类可以很好地与 DataContractSerializer 配合使用,也可以切换到在 WCF 调用中使用 XmlSerializer。

相关文章: