2010-10-07 7 views
1

Je me connecte à un service ODATA via une application C# ASP.NET, qui a des activités de service telles que:ODATA Consommez Service Operation de C# ASP.NET 4.0

GetItems(int? itemID, double? price) 

Je peux consommer ce sans problèmes dans mon navigateur, par exemple

http://api.mycompany.com/companycatalogue/GetItems?itemID=4 

Je comprends comment utiliser LINQ to Entities consommer un service OData, mais ne peut pas trouver une explication décente de la façon de consommer le service opérations comme celle-ci en C#. J'ai fait une référence Web au service dans ma solution Visual Studio.

Jusqu'à présent, j'ai quelque chose comme ça pour mon habitude consommatrice des données:

using CompanyCatalogue; //my web reference 
... 
protected void Page_Load(object sender, EventArgs e) 
{ 
    CompanyCatalogueEntities dataContext = new CompanyCatalogueEntities (new Uri("http://api.mycompany.com/companycatalogue/")); 
    var result = from i in dataContext.Items select i; //just an example 

    //this is where I get into problems 
    var operationResults = CompanyCatalogue.GetItems(6, 20.5); //I just made this up 
} 

Tous les pointeurs?

Répondre

3

OK, a obtenu la réponse:

using CompanyCatalogue; //my web reference 
... 
protected void Page_Load(object sender, EventArgs e) 
{ 
    CompanyCatalogueEntities dataContext = new CompanyCatalogueEntities(); 

    DataServiceQuery<GetItemsResult> q = dataContext.CreateQuery<GetItemsResult>("GetItems") 
     .AddQueryOption("paramName", 6) 
     .AddQueryOption("paramName2", 20.5); 

    List<GetItemsResult> items = q.Execute().ToList(); 
} 
0

Avez-vous essayé d'utiliser HttpWebRequest?

+0

Voulez-vous dire, en utilisant l'URL et en analysant la sortie? – Zac

+0

@Zac Oui. Alternativement, vous pouvez utiliser HTTPClient du kit de démarrage WCF REST, il fera tout le travail lourd pour vous. Même désérialisant en types forts. –

1

Cela peut être une aide pour vous. Cet exemple de code permet de consommer l'opération de service dans le service de données WFC. Cette opération de service (GetRowCount) renvoie la valeur de type entier (int). entrée par nom est "code"

var q = context.CreateQuery<int>("GetRowCount").AddQueryOption("code", "'" + serviceProvider.Code + "'"); 
      int RecordCount = context.Execute<int>(new Uri(q.RequestUri.ToString().Replace("GetRowCount()", "GetRowCount"))).FirstOrDefault(); 
Questions connexes