【问题标题】:WCF serialization errorWCF 序列化错误
【发布时间】:2009-09-03 07:49:59
【问题描述】:

我有一个 WCF 服务的方法,它接受一个名为 IClient 的接口作为参数

[OperationContract]
void RegisterClientToCallBackTo(IClientCallBack client);

public interface IClient
{
    void SendMessage(string message);
}

我有一个实现 iclient 的 windows 窗体,当我将窗体传递给方法时,我收到错误:
类型“FormMain”不能继承自未使用 DataContractAttribute 或 SerializableAttribute 标记的类型。考虑使用 DataContractAttribute 或 SerializableAttribute 标记基类型“System.Windows.Forms.Form”,或从派生类型中删除它们。

我尝试用 [DataContractAttribute] 和 [SerializableAttribute] 标记表单,但我仍然遇到同样的错误

有什么想法吗?

【问题讨论】:

  • 能否包括调用序列化(和序列化代码)?

标签: c# asp.net wcf


【解决方案1】:

您根本无法通过 WCF 传递表单; WCF 旨在传递状态,而不是实现。 IMO,您最好创建一个 DTO 来表示您要传递的 数据,然后通过 WCF 传递 那个

【讨论】:

    【解决方案2】:

    消息告诉您,您不能只使用 [DataContractAttribute] 和 [SerializableAttribute] 标记子类(即您的表单),您还必须使用 [DataContractAttribute] 和 [SerializableAttribute] 标记所有父类。你需要找到另一种方法。

    无论如何,传递一个表单似乎很奇怪 - 让一个表单管理与服务的联系听起来不是很好的封装。也许是时候看看presentation pattern 之类的MVCMVP?然后,您的回调将在您控制的类中。

    【讨论】:

      【解决方案3】:

      你能发布一下 SendMessage 的定义吗?

      您还需要确保在更改合同或服务时更新客户参考。

      编辑

      正如其他人所说,您必须发送 DTO,而不能发送表单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多