我一直在使用OData一段時間,並且發現它是設置我的服務器的絕佳工具。今天我遇到了一些我從未見過的事情,這絕對讓我感到困惑。
我在客戶端上使用.Expand在獲取報表時請求報表的數據樹。我在原型中使用了確切的查詢,並且它完美地工作(即完全水合)。當我使用Fiddler發送查詢時,響應數據包是完美的,幷包含我正在查找的所有數據。
問題是沒有任何擴展屬性已被客戶端水合(服務引用與當前服務完全保持最新)。爲了試圖弄清楚發生了什麼,我將範圍縮小到了一個屬性,但它仍然不起作用。
var report = (serviceContext.Reports.Expand("ReportAreas").Where(r=>r.ReportID==reportID)).SingleOrDefault();
給我的報告,但ReportAreas包含0個項目。如果我然後嘗試:
serviceContext.LoadProperty(report,"ReportAreas");
然後ReportAreas包含20左右的項目。
這讓我非常瘋狂,因爲Expand正在爲不同的對象樹(不同的查詢,但功能相同的代碼)工作,沒有任何問題。有沒有人有任何建議,我可以如何解決這裏究竟發生了什麼?
更新:
這可能是wierder並建議我的客戶的OData一個bug這個今天一些新的信息。我發現只有一部分Report對象沒有被填充擴展屬性。數據庫中的大部分報告都非常好。也就是說,如果我要求擴展ReportAreas的所有報告(而不是精煉爲單個報告ID),則大約有80-90%的ReportAreas的非零計數爲0,其餘爲0.
如果報告沒有任何屬性被填充(null或0 count)實際的屬性對象被實例化並且它們的屬性被設置(來自服務引用的Reference.cs文件中的斷點),例如屬於ReportArea對象的ReportID,PropertyAreaID和History值在查詢分辨率期間設置了16次,但ReportAreas列表在請求時計數爲0。當我使用_service.LoadProperty時,它返回16個ReportAreas。
它在Expand查詢中引用了一個參考不匹配的問題,但它過於一致而無法成爲一個簡單的問題。工作總是有效的報告和不起作用的報告永不工作。真的希望有人能幫助我找出這個,所以我可以移動到一些有用的編碼...
您可以嘗試Fiddler並查看向服務器發送了什麼查詢(URL),以及響應是否包含擴展數據。 – 2011-03-23 14:12:44
根據第2段「當我使用Fiddler發送查詢時,響應數據包是完美的(即包含所有擴展數據)」 – 2011-03-31 06:57:40
我明白,當您從Fiddler手動發送請求時,它會起作用。我問是否可以使用Fiddler查看客戶端應用程序發送的請求,尤其是請求的URL和響應。 – 2011-03-31 10:41:30