【问题标题】:The remote server returned an unexpected response: (502) Bad Gateway in Azure WCF远程服务器返回意外响应:(502) Azure WCF 中的错误网关
【发布时间】:2016-02-17 01:08:13
【问题描述】:

我已经上传了具有以下合同的服务。

[ServiceContract]
public interface Service
{
  [OperationContract]
  void CreateThing(Thing thing);
  [OperationContract]
  List<Thing> RetrieveThings();
}

当我调用创建方法时,一切正常,实例在数据库中创建,我没有收到任何错误。但是,当我检索元素时,出现错误:

远程服务器返回意外响应:(502) Bad Gateway。

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

这是它不起作用时的样子:

public List<Thing> RetrieveThings()
{
  List<Thing> output;
  using (Context context = new Context())
    output = context.Things.ToList();
  return output;
}

这是它工作时的样子:

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

我在这里做了什么不同的事情(在引擎盖下而不是有意识地)?显然我可以访问数据库并且我拥有特权。我也可以读出所有信息。不过,出于某种原因,我必须创建对象的副本。而且我需要逐个而不是使用 LINQ 查询。很迷茫……

【问题讨论】:

    标签: c# entity-framework linq wcf azure


    【解决方案1】:

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

    context.Things.ToList()
    

    此代码看起来像是从服务中发送回 EntityObject。尝试使用 POCO 而不是使用“Thing”界面怎么样?或者,您可以转换/转换对象并返回它?

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

    你检查过this one on MSDN吗?我尚未对其进行测试,但您似乎需要申请[ApplyDataContractResolverAttribute]

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

    【讨论】:

    • 我已经稍微修改了你的答案。由于只有你和我在说话,所以对于未来的读者来说,流量不会成为问题。我建议我们删除所有的 cmets,因为它们现在应该被合并到问题/答案中。
    • 另外,我接受它作为答案,因为它确实解决了问题,并且为有趣的链接 +1。可悲的是,这是我为我的学生创建的 POC,我担心现在创建自己的属性有点超出他们的舒适区。尽管如此,回复是正确和有帮助的(至少对我来说,呵呵)。
    • 太棒了!我很高兴它解决了这些问题。干杯,伙计!
    猜你喜欢
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    相关资源
    最近更新 更多