LISEZ D'ABORD avant de répondre!Optimisation d'une requête RESTful dans le client
J'ai un service RESTful qui entoure Entity Framework. Fondamentalement, tout ce que j'ai fait était de créer une base de données, ajouter des relations entre les tables, créer un modèle Entity autour de cette base de données et enfin exposer l'ensemble comme un service RESTful * .svc. Ceci est fait, ne peut pas être changé non plus.
Maintenant, j'ai besoin d'interroger des données à partir d'une application cliente. Tout ce que je peux accéder est le service lui-même. Je ne peux pas ajouter de code côté serveur, même si je le voulais. Le serveur est maintenant verrouillé.
J'ai besoin de récupérer des données d'une table appelée "ProductVoorwaarden" (conditions du produit) qui est liée à trois autres tables. (Rubriek, Categorie et Datatype.) Ces données doivent être retournées en XML, avec un nœud racine appelé "PRODUCTVOORWAARDEN" et chaque enregistrement dans son propre XElement appelé "REC". Au sein de ce REC, il y a un attribut pour chaque champ de la table plus des références aux tables liées. Voici le code que j'ai en ce moment:
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;
}
Ce code fonctionne bien, mais il est lent. Il lit tous les enregistrements ProductVoorwaarden, mais il doit à nouveau effectuer des allers-retours au serveur pour chaque enregistrement afin de récupérer Rubriek.Code, Categorie.Naam et Datatype.Naam. (Dans la base de données, ces relations sont définies par un champ Identity auto-incrémental, mais le code XML utilise le code ou Naam comme référence.)
Comme vous pouvez l'imaginer, chaque retour au service RESTful prend plus de temps, que j'essaye d'éviter. Alors, y a-t-il un moyen d'accélérer un peu le processus du côté client?
Le serveur est encore en développement et la prochaine version prendra quelques mois de plus. Par conséquent, je dois gérer les options que le serveur fournit actuellement. S'il n'y a aucun moyen d'accélérer cela sans modifier le serveur, alors bien. Au moins, j'ai essayé. Il y a 35 tables de plus qui doivent être traitées avec une date limite dans quelques jours, donc si cela fonctionne, alors cela fonctionne.