-3

我希望将 COM 对象传递到我的 WCF 服务器,但是无论我尝试什么,我都会不断收到以下错误:

无法序列化类型“System.__ComObject”。考虑使用 DataContractAttribute 属性对其进行标记,并使用 DataMemberAttribute 属性标记您想要序列化的所有成员。有关其他支持的类型,请参阅 Microsoft .NET Framework 文档。

我试过了ServiceKnownType

[ServiceKnownType(typeof(ComClass))]

我试过包装它

[DataContract]
public class receivedClass
{
  [DataMember]
  public ComClass controlClass { get; set; }
}

是否可以对其进行序列化以便将其发送到我的 WCF?(我将其用于 IPC 程序)

哦,这是 COM 类是第三方生成的

4

2 回答 2

3

COM 对象基本上只是一个指向未管理内存的指针。它不能被 .NET 固有地序列化。但是,可以序列化对象的状态,在 WCF 服务中构造 COM 对象的新对象实例,然后恢复状态。表示自治信息的 com 对象的属性可以被序列化并传递给服务器。但是,如果对象是任何未管理对象(句柄、内存指针等)的包装器,则可能很难保存 COM 对象的状态。

于 2012-04-26T21:22:05.917 回答
0

为什么不尝试使用 Microsoft DLR 中附带的动态类型和 COM 绑定器。我认为这可以解决问题。这是一篇不错的帖子,您可能会发现它很有用。 http://loosexaml.wordpress.com/2011/01/01/wcf-serialization-of-dlr-dynamic-types/

于 2012-04-26T21:08:47.653 回答