2011-03-17 5 views
0

J'ai un service de données WCF qui expose un contexte de base de données Entity Framework et EntitySet comme si,Consommez WCF ressource de service de données dynamique

public class DatabaseService : DataService<DatabaseContext> 
{ 
    // This method is called only once to initialize service-wide policies. 
    public static void InitializeService(DataServiceConfiguration config) 
    { 

     // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc. 
     // Examples: 

     config.SetEntitySetAccessRule("People", EntitySetRights.AllRead); 

     // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All); 
     config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; 
    } 
} 

Est-il possible de consommer ce service d'une manière qui me permet de construire des requêtes dynamiquement contre le service en utilisant l'URI complète?

Ie. l'URI J'utiliserai est,

http://localhost:1353/DatabaseService.svc/People? filtre $ (mon filtre ici)

Je ne veux pas l'un de mes requêtes pour être codées en dur, juste dynamiquement invoqué en changeant l'URI basée sur une chaîne.

Assez sûr que c'est possible, mais l'implémentation est-elle simple ou nécessite-t-elle beaucoup de code, comme un proxy dynamique complet pour le service WCF? J'ai déjà fait ce genre de choses avec des services SOAP simples avant.

EDIT

Plus précisément je veux être en mesure de faire quelque chose efficacement comme ça,

IEnumerable<People> peopleResults = new DataServiceQuery("http://localhost:1353/DatabaseService.svc/People?$filter (my filter here)") 

Lorsque les résultats sont bien remplis dans ma liste sans que le client ait à connaître quoi que ce soit, sauf la URI complet (y compris les filtres et tous).

Répondre

1

La classe DataServiceQuery, une fois construite pour un type, a un RequestUri que vous pouvez définir pour personnaliser la requête. Je ne sais pas si c'est l'usage canonique, mais cela fonctionnerait certainement.

+0

Ça a l'air bien. Que diriez-vous de faire encore plus au moment de l'exécution, par exemple, en spécifiant la référence de service réelle jusqu'à la requête. EndpointAddress() était une solution que j'ai vu, cela ou créer un proxy dynamique entier. –

Questions connexes