Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 远程服务器返回了意外响应:(502)Azure WCF中的网关错误_C#_Entity Framework_Linq_Wcf_Azure - Fatal编程技术网

C# 远程服务器返回了意外响应:(502)Azure WCF中的网关错误

C# 远程服务器返回了意外响应:(502)Azure WCF中的网关错误,c#,entity-framework,linq,wcf,azure,C#,Entity Framework,Linq,Wcf,Azure,我上传了一个带有以下合同的服务 [ServiceContract] public interface Service { [OperationContract] void CreateThing(Thing thing); [OperationContract] List<Thing> RetrieveThings(); } [服务合同] 公共接口服务 { [经营合同] 虚空创造物(物); [经营合同] 列出检索内容(); } 当我调用creation方法时,一切

我上传了一个带有以下合同的服务

[ServiceContract]
public interface Service
{
  [OperationContract]
  void CreateThing(Thing thing);
  [OperationContract]
  List<Thing> RetrieveThings();
}
[服务合同]
公共接口服务
{
[经营合同]
虚空创造物(物);
[经营合同]
列出检索内容();
}
当我调用creation方法时,一切都很好,实例是在DB中创建的,我没有收到任何错误。但是,当检索元素时,会出现以下错误:

远程服务器返回意外响应:(502)网关错误

奇怪的是,当列表为空(数据库中没有元素)时,操作进行得很顺利。更奇怪的是,针对DB的操作在服务器内部工作,如果我聚合元素的名称并将它们作为字符串发送出去,或者打包在类的string属性中,它也可以工作

这就是它不工作时的样子:

public List<Thing> RetrieveThings()
{
  List<Thing> output;
  using (Context context = new Context())
    output = context.Things.ToList();
  return output;
}
public List RetrieveThings()
{
列表输出;
使用(上下文=新上下文())
输出=context.Things.ToList();
返回输出;
}
这就是它工作时的样子:

public List<Thing> RetrieveThings()
{
  List<Thing> output = new List<Thing>();
  using (Context context = new Context())
    foreach (Thing thing in context.Things.ToList())
      output.Add(new Thing {Id = thing.Id, Name = thing.Name});
  return output;
}
public List RetrieveThings()
{
列表输出=新列表();
使用(上下文=新上下文())
foreach(context.Things.ToList()中的Thing)
Add(新事物{Id=Thing.Id,Name=Thing.Name});
返回输出;
}

我在这里做的有什么不同(在引擎盖下,不自觉地)?显然,我有权访问数据库,我有特权。我也能读出所有的信息。不过,出于某种原因,我必须创建对象的副本。我需要逐个执行,而不是使用LINQ查询。非常困惑…

我认为这可能与序列化有关

context.Things.ToList()
此代码看起来像是从服务发回EntityObject。尝试使用POCO而不是使用“东西”接口怎么样?或者,您可以投射/变换对象并返回它

context.Things.ToList()ToAnotherPlainClass()
你的“Thing”类只有两个属性吗?你能像那样不打圈地返回吗

public List<Thing> RetrieveThings()
{
  List<Thing> output;
  using (Context context = new Context())
    output = (from t in context.Things
               select new Thing() {
                  Id = t.Id, Name = t.Name
               }
             ).ToList();
  return output;
}
public List RetrieveThings()
{
列表输出;
使用(上下文=新上下文())
输出=(来自context.Things中的t
选择新事物(){
Id=t.Id,Name=t.Name
}
).ToList();
返回输出;
}
你查过了吗?我还没有测试过它,但您似乎需要应用
[ApplyDataContractResolvetAttribute]


在我的大多数项目中,我都创建了与实际实体不同的响应模型,因此我没有您现在遇到的问题。如果您还没有尝试过
ApplyDataContractResolverAttribute
,我会说您应该尝试一下

我对你的答案做了一些修改。因为只有你和我在说话,所以对于未来的读者来说,这种流动不会是一个问题。我建议我们删除所有评论,因为它们现在应该被纳入问题/答案中。此外,我接受它作为答案,因为它确实解决了问题,并且+1表示有趣的链接。可悲的是,这是我为我的学生创建的POC,我担心创建自己的属性现在有点超出他们的舒适区。尽管如此,这个回答是正确的,也是有帮助的(至少对我来说,呵呵)。太好了!我很高兴它解决了这些问题。干杯,伙计!