2016-02-17 52 views
1

我已經使用以下合同上傳了服務。遠程服務器返回了意外的響應:(502)Azure WCF中的錯誤網關

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

當我調用創建方法時,一切都很好,實例在數據庫中創建並且沒有錯誤。然而,當我取回的元素,我得到的錯誤:

The remote server returned an unexpected response: (502) Bad Gateway.

怪異的是,當列表爲空(在DB沒有元素),運行順利。更奇怪的是,針對數據庫的操作在服務器內部工作,並且如果我彙總元素的名稱並將其作爲字符串發送出去,或者打包到的字符串屬性中,它也可以工作!

這是什麼樣子的,當它不工作:

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查詢。非常困惑...

回答

1

我認爲這可能與序列化有關。

context.Things.ToList() 

此代碼看起來像您正在從服務發回EntityObject。如何嘗試使用POCO而不是使用「Thing」界面?或者,您可以投射/轉換對象並將其返回?

context.Things.ToList()ToAnotherPlainClass() 

您的「事」類只有兩個屬性?你能夠像沒有循環一樣返回嗎?

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,我會說你應該嘗試。

+0

我已經編輯了你的答案了一下。由於只有你和我說話,這個流程對於未來的讀者來說不會成爲問題。我建議我們刪除所有評論,因爲他們現在已經納入了問題/答案中,因爲他們應該這樣做。 –

+0

此外,我接受它作爲答案,因爲它實際上確實解決了問題,爲有趣的鏈接+1。不幸的是,這是我爲學生創造的POC,我擔心現在創造自己的屬性比他們的舒適區略高。儘管如此,答覆是正確的和有幫助的(至少對我來說,嘿嘿)。 –

+0

太棒了!我很高興它解決了這些問題。隊友的歡呼聲! –

相關問題