0

当我想在 WCF 中以复合类型发送 devExpress 会话时出现异常。我试图让它可序列化,但我仍然得到错误

信息:不应System.Data.SqlClient.SqlConnection包含数据合同名称 SqlConnection:http://schemas.datacontract.org/2004/07/System.Data.SqlClient 的类型。DataContractResolver如果您正在使用DataContractSerializer或将任何静态未知的类型添加到已知类型列表中,请考虑使用 a - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给序列化程序的已知类型列表中。

这是我使用的 DataContract。

[DataContract] 
[Serializable] 
[ServiceKnownType(typeof(Session))] 
[ServiceKnownType(typeof(SqlConnection))] 
[ServiceKnownType(typeof(SqlParameter))] 
public class CompositeType 
{
 Session sValue ; 
 [DataMember] 
 public Session SessionValue 
 { get {return sValue; } set {sValue = value; } } 

  }

我还使用一种将此类作为参数发送的方法

void GetDataUsingDataContract(CompositeType composite); 
4

1 回答 1

2

XPO 对象通过 Session 绑定到数据存储,您不能通过网络发送它们。

如果您只想在计算机之间传输原始数据,请使用数据传输对象。XPO 将在一侧从数据库中检索数据,而您将在另一侧使用 WCF 客户端方法检索数据。

XPO 还支持更复杂的场景。如果您想在客户端使用 XPO,但出于安全原因无法创建直接数据库连接,您可以将IDataStore接口实现为 WCF 端的协定。

实现 IDataStore 接口很容易,因为您只需要包装现有的Data Store Adapter即可。所有数据存储适配器都实现 IDataStore 接口。XPO 的数据访问层可以使用任何 IDataStore 作为数据源。此博客解释了这种方法:XPO 适用于分布式应用程序

此外,XPO 具有内置的 WCF 服务和已经实现 IDataStore 接口的客户端组件。您所需要的只是将它们放在一起。请参阅此处的示例:通过 WCF 服务传输数据

于 2020-03-24T02:26:06.107 回答