2012-06-05 39 views
0

我在WP 7.1應用程序中支持邏輯支持。我有一個長期存在的DataServiceContext實例,我使用DataServiceState幫助器序列化和反序列化。在反序列化過程中,我可以使用URI作爲查找鍵成功地從上下文中檢索User類的實例。例如,DataServiceContext在序列化/反序列化往返後不可用

var context= ... a deserialized DataServiceContext ... 
var userIdentity = ... a URI that identifies a User instance ... 
User user = null; 
context.TryGetEntity(userIdentity.ToString(), out user); 

但是,如果我嘗試加載在用戶實例的屬性(我已經剛剛從上下文拉)如下:

context.BeginLoadProperty(user, "Foo", MyCallback, null); 

背景下引發InvalidOperationException與消息「上下文當前沒有跟蹤實體。」似乎反序列化並不能保持上下文的參照完整性。

我創建了一個簡單的應用程序來演示此問題。從Skydrive下載:http://sdrv.ms/MhctLA

該應用使用示例數據服務http://services.odata.org/OData/OData.svc。我手動運行dataSvcUtil以在ODataDemo.cs中創建代理。請注意,我必須在生成的代碼中的類DemoService上添加DataContract屬性,但沒有進行其他更改。

一旦應用程序運行,點擊「數據服務上下文」按鈕。以下頁面將加載數據服務中的所有產品,隨機選擇一個從上下文中檢索,緩存該產品的標識URI,然後加載產品的Category屬性。

接下來,點擊「序列化」按鈕。應用程序使用DataServiceState序列化上下文。

最後,點擊「反序列化」按鈕。該應用程序反序列化上下文,然後試圖對抗復活的背景下:

  1. 獲取使用DataServiceContext.TryGetEntity和緩存的URI的產物。
  2. 使用DataServiceContext.TryGetUri獲取同一產品的URI。
  3. 加載產品的Category屬性。

步驟1成功,而步驟2和3失敗。 TryGetUri無法找到我剛剛從上下文中檢索到的實體的描述符,這表明反序列化的上下文有問題。

我在做一些可怕的錯誤?或者這是一個錯誤?

回答

0

我會看看這個,並儘快回覆你。感謝您分享您的repro項目,這將非常有用。

編輯:看起來像這是一個錯誤。解決方法是丟棄上下文實例並將實例附加到新的上下文中。

+0

感謝您的信息,Turker。我已經重構了我的應用程序,以避免序列化數據服務上下文。 – lencharest