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 并将此数据传递给客户
仅此而已。
我的 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 并将此数据传递给客户
仅此而已。