首页 > 解决方案 > 将对象从 Web 服务返回到客户端时收到错误消息

问题描述

我使用 Visual Studio 2010 Entity Framework 4 编写了一个桌面应用程序,其中包含几个项目:

  1. ECartableDataService(这是一个基于 Web 的数据服务,上传到 IIS 服务器)
  2. ECartableEntities
  3. ECartableModel
  4. ECartableRepository
  5. ECartableUI

一切正常,直到我决定将其升级到 Visual Studio 2017 和 Entity Framework 6。

说到这部分:

   using (ECartableServiceClient client = new ECartableServiceClient ())
   {
        User t = client.JustForTest();       
   }

我收到以下错误:

接收对 http://Server2012:11545/ECartableDataService.svc 的 HTTP 响应时出错。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志。

JustForTest函数只是一个用于测试和找出问题所在的函数,它驻留在 Web 数据服务中:

public User JustForTest()
{            
        User u = new User();   // User is an entity created by Entity Framework
        // bool flag = false;

        using (UnitOfWork unitOfWork = new UnitOfWork())
        {
            u = unitOfWork.UserRepository.GetTest(1135);
        }
           
        return u;
}

当函数返回一个User对象时会出现问题,例如,如果我设置它返回一个布尔值(如标志),它工作正常,但它返回一个对象User或其他实体,它会引发错误。

我跟踪了网络服务,并从中得到了消息:

在此处输入图像描述

根据具有一对多关系的实体框架对象的序列化

我做了以下

  context.Configuration.ProxyCreationEnabled = false;

但它没有成功。

这是关于序列化的事情,这个应用程序在 Visual Studio 2010 上运行良好,但我如何将对象从 Web 服务返回到 Visual Studio 2017 中的 UI?

标签: c#visual-studioweb-servicesvisual-studio-2010wcf-data-services

解决方案


我为实体的所有导航属性(此处的用户)添加了 KnownType 属性,它已修复,如下所示:

[KnownType(typeof(Task))]
[KnownType(typeof(Folder))]
public partial class User : StateObject
{
    
    public User()
    {
        this.TasksSent = new HashSet<Task>();  
        this.Folder= new HashSet<Folder>();            
    }

    public short Id { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public byte Privilege { get; set; }
    public bool IsActive { get; set; }
    public string ProjectExclude { get; set; }

   
    public virtual ICollection<Folder> Folder{ get; set; }
    public virtual ICollection<Task> TasksSent { get; set; }
    
}

推荐阅读