【问题标题】:Error while running WCF service library运行 WCF 服务库时出错
【发布时间】:2011-08-05 18:34:49
【问题描述】:

我已经建立了一个 WCF 服务库,我添加了对少数 3rd 方 dll 的引用。这是我的界面

[ServiceContract]
public interface IService1
{
    [OperationContract]
    3rdpartyreturntype GetObj(System.Windows.Controls.Control txtcontrol);
}

// Use a data contract as illustrated in the sample below to add composite types to service operations
[DataContract]
public class nclass
{
    [DataMember]
    public System.Windows.Controls.Control txtcontrol
    {
        get { return txtcontrol; }
        set { txtcontrol = value; }
    }

    [DataMember]
    public 3rdpartyreturntype nobj
    {
        get { return vuiobj; }
        set { vuiobj = value; }
    }

    [DataMember]
    public System.Windows.Input.TouchDevice tchdev
    {
        get { return tchdev; }
        set { tchdev = value; }
    }
}

我已经实现了上面的接口。运行服务时出现以下错误,谁能帮帮我?

无法序列化类型“System.Windows.Input.TouchDevice”。考虑 用 DataContractAttribute 属性标记它,并标记所有 您希望使用 DataMemberAttribute 序列化的成员 属性。

【问题讨论】:

  • 你能为所有 3rdpartyreturntype 编写包装器吗?如果是这样,那么这些可以用[DataMember] 属性标记。

标签: wcf serialization service


【解决方案1】:

如果您想要序列化类等复杂类型,则必须将其每个成员声明为数据成员,并将类声明为数据契约。

在这种情况下,触摸设备是复杂类型(类),因此您需要将其所有成员标记为数据成员,并将类标记为数据契约。

但是我可以从它属于 system.windows.input 的类型中看到,该类可能没有被序列化。因此您不能将其用作数据成员。

如果您只使用一组属于 touchDevice 类的成员,您可以创建自己的类,该类将仅映射可以序列化的一组 touchdevice 成员。并用 datacontract 和 datamember 属性装饰这个新类。

【讨论】:

  • GetObj 方法是第 3 方方法,他们期望的参数是 System.Windows.Controls.Control,所以我无法更改。另外我添加了触摸设备只是因为我在错误中得到它,我没有在任何地方使用它(也许第 3 部分 dll 正在使用它并不确定)。我还使用了反射器并查看了第 3 方类“3rdpartyreturntype”,如果我可以将其成员映射到我自己的类并序列化该类。但据我所知,它的属性之一是服务。我必须映射所有属性吗?如何映射服务?
【解决方案2】:

看起来“System.Windows.Input.TouchDevice”类型本身并未标记为可序列化或DataContract。

与其尝试像那样直接传递 TouchDevice 和 Control,也许你可以只传递你关心的属性。我猜在 TextControl 的情况下,您只关心 Text 值。而对于 TouchDevice,可能是源控件和目标控件的名称?

【讨论】:

  • GetObj 方法是第 3 方方法,他们期望的参数是 System.Windows.Controls.Control,所以我无法更改。另外我添加了触摸设备只是因为我在错误中得到它,我没有在任何地方使用它(也许第 3 部分 dll 正在使用它并不确定)。我还使用了反射器并查看了第 3 方类“3rdpartyreturntype”,如果我可以将其成员映射到我自己的类并序列化该类。但据我所知,它的属性之一是服务。我必须映射所有属性吗?如何映射服务?
猜你喜欢
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多