【发布时间】:2011-07-22 22:13:52
【问题描述】:
我正在尝试访问在 ASP.NET 2.0 Web 应用程序中使用 basicHttpBinding 公开的 WCF 服务。这些服务使用 Entity Framework 4.0,其业务实体是使用 ADO.NET Self-Tracking Entity Generator T4 模板创建的。我可以从 ASP.NET 2.0 应用程序附加到服务并进行编译,但是在运行时,当我尝试调用服务进行保存时,出现以下错误:
格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://tempuri.org/:foc 时出错。 InnerException 消息是“NetDataContractSerializer 不支持将类型 'Business.App.ObjectChangeTracker' 用作 get-only 集合。考虑使用 CollectionDataContractAttribute 特性或 SerializableAttribute 特性来标记类型,或者将设置器添加到属性。有关详细信息,请参阅 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)]
任何想法我做错了什么,或者我可以做些什么来解决这个问题?非常感谢!
【问题讨论】:
-
错误是客户端还是服务器端?
-
这是服务器端。 SendFOC 方法运行良好,直到我添加了返回类型(它以前是 void),所以这绝对是问题的根源。我只是不确定如何解决它。
-
我将 ValidateFOC 和 SendFOC 方法的返回类型更改为在返回对象图中不包含任何对象,以及不包含任何使用泛型的对象。新的返回类型只是一个布尔字段和一个字符串数组字段。我仍然收到此错误。哦!令人沮丧!
-
你的对象是实体框架对象吗?
-
NetDataContractSerializer 不适用于 .NET 2.0 客户端。