我有一个Silverlight应用程序,其中包含支持Silverlight的WCF服务。该服务传递一个带有一些字符串属性的小型POCO类,以及一个List<>在类中定义的枚举。使用ASP.NET开发服务器运行时一切正常,但当我将服务移动到IIS服务器(Windows 2003)时,当我尝试浏览.svc文件时出现以下错误:
输入'MyProject.Web.MyClass'不能 序列化。考虑用它来标记 DataContractAttribute属性, 并标记其所有成员 希望序列化 DataMemberAttribute属性。
尽管它处于工作开发阶段,但我尝试添加装饰......但到目前为止没有效果。
关于什么可能导致开发工作站和服务器之间的结果差异的任何想法?
答案 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>
马克