Silverlight客户端,datacontract和私有只读成员

时间:2011-04-06 22:55:40

标签: silverlight wcf silverlight-4.0 datacontract

我有一个Silverlight客户端和一个WCF服务,我想要共享一个类:

[DataContract]
public class DatesAreFun
{
  [DataMember]
  private readonly DateTime _date;

  [DataMember]
  private readonly bool _isFun;

  public DateTime DateTime { get { return _date; } }
  public bool IsFun { get { return _isFun; } }

  public DatesAreFun(DateTime date, bool isFun)
  {
    _date = date;
    _isFun = fun;
  }
}

WCF方似乎通过网络发送了适当的数据,但Silverlight方面并不喜欢它。它将WCF服务DatesAreFun类视为与我的DatesAreFun类不同的类。

有关如何最好地解决此问题的任何建议?谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个常见问题,已在此处讨论过几次。

添加服务引用时,请确保单击高级按钮,然后确保勾选了引用程序集中的重用类型复选框,并选中在所有引用的程序集中重用类型选项。

您还必须创建一个面向Silverlight运行时的新类库程序集。这是因为WCF服务引用的类库将以.Net框架的完整(或可能是客户端配置文件)版本为目标,而Silverlight程序集无法做到(实际上Silverlight程序集只能引用其他Silverlight目标程序集)。在您的新类库中,您可以引用完整版本的类库所使用的相同物理文件,这更详细here(我曾经有过同样的问题......)。您也可以通过this bunch of search results选择相关问题。

根据您的工作方式,您可能会发现您还必须浏览服务引用的 Reference.cs 文件,并更改指定数据实体的名称空间。 (如果更新或重新配置服务引用,将重新生成此文件。)