将Silverlight WCF服务部署到IIS服务器会出现错误“考虑使用DataContractAttribute进行标记”

时间:2009-10-26 17:47:53

标签: wcf silverlight silverlight-3.0

我有一个Silverlight应用程序,其中包含支持Silverlight的WCF服务。该服务传递一个带有一些字符串属性的小型POCO类,以及一个List<>在类中定义的枚举。使用ASP.NET开发服务器运行时一切正常,但当我将服务移动到IIS服务器(Windows 2003)时,当我尝试浏览.svc文件时出现以下错误:

  

输入'MyProject.Web.MyClass'不能   序列化。考虑用它来标记   DataContractAttribute属性,   并标记其所有成员   希望序列化   DataMemberAttribute属性。

尽管它处于工作开发阶段,但我尝试添加装饰......但到目前为止没有效果。

关于什么可能导致开发工作站和服务器之间的结果差异的任何想法?

2 个答案:

答案 0 :(得分:1)

确保(1)服务器上安装了.NET Framework 3.5 SP1,以及(2)网站在ASP.Net 2.0模式而不是1.1模式下运行。

Web Platform Installer是一种安装更新框架的简便方法(如果尚未安装)。

答案 1 :(得分:1)

您的数据元素(POCO类)应该被标记为WCF的DataContracts,以便WCF明确知道序列化通过网络发送所需的内容。

与Xml Serializer相反,WCF中的DataContractSerializer使用“选择加入”模式 - 只有明确标记为[DataContract][DataMember]的内容才会被序列化 - 其他任何事情都会被忽略。

[DataContract]
class YourPocoClass
{
   [DataMember]
   private int _ID;

   [DataMember]
   string CustomerName { get; set; } 

   public decimal CustomerOrderAmount { get; set; } 
}

在此示例中,从YourPocoClass开始,您将_ID字段和CustomerName属性序列化为WCF消息 - 但CustomerOrderAmount将< strong>不序列化 - public或不。{/ p>

因此,最佳做法是:使用[DataContract](对于类)和[DataMember](对于要在该类内部发送的每个成员),明确标记您需要在WCF中发送的所有复杂类型。 / p>

马克