在應答之前先閱讀!在客戶端優化RESTful查詢
我有一個RESTful服務,它圍繞實體框架。基本上,我所做的只是創建一個數據庫,在表之間添加關係,圍繞此數據庫創建實體模型,並最終將整個事件公開爲RESTful * .svc服務。這樣做,也不能改變。
現在我需要通過客戶端應用程序從它查詢數據。我可以訪問的只是服務本身。即使我想,我也不能添加任何服務器端代碼。服務器現在被鎖定。
我需要從名爲「ProductVoorwaarden」(產品條件)的表格中檢索數據,該表格鏈接到其他三個表格。 (Rubriek,Categorie和Datatype。)這些數據需要以XML格式返回,其中一個名爲「PRODUCTVOORWAARDEN」的根節點以及它自己的XElement中的每個記錄都稱爲「REC」。在此REC中,表中的每個字段都有一個屬性,並加上對相關表的引用。這裏是我現在的代碼:
XElement PRODUCTVOORWAARDEN()
{
XElement Result = new XElement("PRODUCTVOORWAARDEN");
var Brondata = COBA.Productvoorwaarden.OrderBy(O => O.Code);
foreach (var item in Brondata)
{
COBA.LoadProperty(item, "Rubriek");
COBA.LoadProperty(item, "Categorie");
COBA.LoadProperty(item, "Datatype");
XElement REC = new XElement("REC",
Attribute("Rubriek", item.Rubriek.Code),
Attribute("Categorie", item.Categorie.Naam),
Attribute("Code", item.Code),
Attribute("Datatype", item.Datatype.Naam),
Attribute("Eenheid", item.Eenheid),
Attribute("Naam", item.Naam),
Attribute("Omschrijving", item.Omschrijving),
Attribute("UitgebreideTekstVeld", item.UitgebreideTekstVeld),
Attribute("Veld", item.Veld)
);
Result.Add(REC);
}
return Result;
}
此代碼工作正常,但速度很慢。它讀取所有ProductVoorwaarden記錄,但它必須再次對服務器進行往返服務,才能檢索Rubriek.Code,Categorie.Naam和Datatype.Naam。 (在數據庫中,這些關係由自動增量標識字段設置,但XML代碼使用代碼或Naam作爲參考)。
正如您所想,每次返回到REST服務的行程都會消耗更多時間,我試圖避免。那麼有什麼方法可以在客戶端更快地加速這一切嗎?
服務器仍在開發中,下一個版本將需要幾個月的時間。因此,我必須處理服務器現在提供的選項。 如果沒有辦法在不修改服務器的情況下加快速度,那很好。至少我已經嘗試過了。還有35個表格需要在幾天內完成處理,所以如果它能正常工作,那麼它就可以工作。