我正在尝试在ASP.NET 2.0 Web应用程序中访问使用basicHttpBinding公开的WCF服务。这些服务使用Entity Framework 4.0,其业务实体是使用ADO.NET自我跟踪实体生成器T4模板创建的。我可以从ASP.NET 2.0应用程序附加到服务就好并编译,但在运行时,当我尝试调用服务进行保存时,我收到以下错误:
格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://tempuri.org/:foc时出错。 InnerException消息是NetDataContractSerializer不支持使用类型'Business.App.ObjectChangeTracker'作为只获取集合。考虑使用CollectionDataContractAttribute属性或SerializableAttribute属性标记类型,或者向属性添加setter。有关详细信息,请参阅InnerException。
我对服务声明没有任何看法;只是正常的ServiceContract和OperationContract属性。
[ServiceContract]
public interface ILSRPipelineServiceEndPoint
{
[OperationContract]
LSRRequestTypeMapping[] GetRequestTypeMappings();
[OperationContract]
LSRResponseTypeMapping[] GetResponseTypeMappings();
[OperationContract]
ServiceResult<FOCResponse> ValidateFOC(FOCResponse foc);
[OperationContract]
ServiceResult<FOCResponse> SendFOC(FOCResponse foc);
[OperationContract]
ref_SourceType GetGatewaySourceType();
}
显示的所有对象都标有[DataContract(IsReference = true)]
任何想法我做错了什么,或者我能做些什么来解决这个问题?万分感谢!
答案 0 :(得分:1)
我认为问题在于您使用的是NetDataContractSerializer而不是DataContractSerializer。据我所知,自跟踪实体仅支持DataContractSerializer。
请参阅此页:MSDN thread
答案 1 :(得分:0)
我最终改为使用View Model POCO,而不是尝试使用状态跟踪组件发送原始对象。谢谢,全部!经验教训。