【问题标题】:Accessing a WCF service from ASP.NET 2.0从 ASP.NET 2.0 访问 WCF 服务
【发布时间】: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 客户端。

标签: asp.net wcf binding


【解决方案1】:

我认为问题在于您使用的是 NetDataContractSerializer 而不是 DataContractSerializer。据我所知,自跟踪实体仅支持 DataContractSerializer。

查看此页面:MSDN thread

【讨论】:

    【解决方案2】:

    我最终改为使用 View Model POCO,而不是尝试使用其状态跟踪组件发送原始对象。谢谢大家!经验教训。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多