WCF - 实体框架 - ERR_CONNECTION_RESET

时间:2015-03-20 15:27:48

标签: entity-framework wcf

我的WCF服务出了问题。这是

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

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

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

当我尝试返回字符串而不是List时,它会起作用。

CustomerNeed是一个通过EntityFramework从我的数据库生成的类。

在我的服务中,我只调用另一个类中的其他方法;

    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;
    }

也许是因为我的表CustomerIned中有一个外键?

当我做&#34; LINQ to entities&#34;要导入我的数据库,是否必须导入由于多对多关系而创建的表?

2 个答案:

答案 0 :(得分:1)

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

在这种情况下,您需要执行以下步骤: 1)创建一个公共类CustomerNeeds并使用DataContract属性对其进行标记。例如:

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

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

就是这样。

答案 1 :(得分:0)

您还没有显示db的位置/内容,但我假设您使用的是实体框架,因为您的标记意味着它是一个实体上下文。您可能在上下文已经处理或没有正确更新的情况下遇到一些问题(但如果情况确实如此,我希望您收到稍微不同的错误。)

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

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

另外,当你说它&#34;作为一个字符串&#34;你回来的东西很像'#34;你好世界&#34 ;?您可能需要查看您的WCF配置,以确保它可以处理您尝试来回传递的数据量。

希望这有帮助!