WCF - Entity Framework - ERR_CONNECTION_RESET

WCF - Entity Framework - ERR_CONNECTION_RESET

我的 WCF 服务有问题。这是

    [OperationContract]
    [WebGet(UriTemplate = "/needs", ResponseFormat = WebMessageFormat.Json)]
    List<CustomerNeed> getAllCustomerNeeds();

当我进入调用此服务的页面时,出现此错误

GET http://localhost:666/rest/Service1.svc/needs net::ERR_CONNECTION_RESET

当我尝试 return 字符串而不是列表时,它起作用了。

CustomerNeed 是 class 通过 EntityFramework 从我的数据库生成的。

在我的服务中,我只调用另一个 class;

中的另一个方法
    public List<CustomerNeed> getAllCustomerNeeds()
    {
        var needs = from cn in db.CustomerNeeds
                    select cn;

        List<CustomerNeed> list = new List<CustomerNeed>();

        foreach (CustomerNeed cusN in needs)
        {
            list.Add(cusN);
        }
        return list;
    }

可能是因为我的 table CustomerNeed 中有一个外键?

当我 "LINQ to entities" 导入我的数据库时,我是否必须导入由于多对多关系而创建的 table?

您没有显示 where/what db 是,但我假设您使用的是 entity framework,因为您的标签暗示它是一个实体上下文。您可能遇到了上下文已经被处理或未正确更新的问题(尽管如果是这种情况,我希望您会收到稍微不同的错误。)

看起来你在函数中经历了一些不必要的步骤,我认为这样的事情会起作用:

public List<CustomerNeed> getAllCustomerNeeds()
{
    using (var db = new YourContext()) // plug in your context object
    {
        return db.CustomerNeeds.ToList();
    }
}

此外,当您说 "works as a string" 时,您会返回一些像 "hello world" 这样的小东西吗?您可能需要查看 WCF 配置以确保它可以处理您尝试来回传递的数据量。

希望对您有所帮助!

我建议您创建一个简单的自定义 class,它将代表您的 CustomerNeeds 数据库实体,在服务器端启动该对象并传递给客户端应用程序。它可以帮助您避免这个问题,也是跨 WCF 服务传输数据的推荐方式。

在这种情况下,您需要执行以下步骤: 1) 创建一个public class CustomerNeeds 并用DataContract 属性标记它。例如:

[DataContract]
public class CustomerNeeds 
{
   [DataMember]
   public SomeDataType PropertyName {get; set;}
}

2) 在服务上启动此对象,将 getAllCustomerNeeds() 方法中的 return 数据类型从实体 class 更改为新创建的 class CustomerNeed 并将此数据传递给客户

仅此而已。