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,我担心创建自己的属性现在有点超出他们的舒适区。尽管如此,这个回答是正确的,也是有帮助的(至少对我来说,呵呵)。太好了!我很高兴它解决了这些问题。干杯,伙计!