2011-09-29 4 views
1

J'ai regardé partout, et rien ne semble fonctionner. Je tente de me connecter à mon service REST (WCF). Il fonctionne très bien dans Firefox en utilisant les éléments suivants:Exemple de client C# REST?

http://localhost:1337/WCF.IService.svc/rest/Services?CostCentreNo=1&Filter=1 

rest est l'adresse de point de terminaison; Services?CostCentreNo=1&Filter=1 est le modèle avec les paramètres

Ci-dessous le point de contrat du serveur.

[OperationContract] 
    [WebGet(UriTemplate = "/Services?CostCentreNo={CostCentreNo}&Filter={Filter}")] 
    List<Services> GetServices(Int32 CostCentreNo, Int32 Filter); 

Puis-je obtenir un exemple de travail de se connecter à cette s'il vous plaît de C# ..

+2

Créer une application cliente et ajouter une référence de service? –

+0

Avez-vous essayé ceci [Consommer WCF Services] (http://msdn.microsoft.com/en-us/library/bb332338.aspx#msdnwcfhc_topic6) – Danny

+0

Les deux ne fonctionnent que pour SOAP dans la mesure où je suis conscient (je viens de vérifier à nouveau) . Où je veux tester REST fonctionne. – Doomsknight

Répondre

2

Essayez ceci pour JSON:

String resonse = String.Empty; 
HttpClient client = new HttpClient(); 

using (HttpResponseMessage httpResponse = client.Get("your_uri")) 
{ 
    response = httpResponse.Content.ReadAsString(); 
} 

Ce code exige que les Microsoft.Http et Microsoft.Http.Extensions dll de la WCF Rest Toolkit - http://aspnet.codeplex.com/releases/view/24644.

+0

Cheers, fonctionne bien. ;) – Doomsknight

4

Créer votre propre proxy en étendant System.ServiceModel.ClientBase<IYourServiceContract>. Chacune de vos méthodes sur le service REST est exposée via la propriété Channel, de sorte que vous pouvez ensuite les envelopper.

[ServiceContract] 
public interface IMyServiceContract 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "/ping")] 
    string Ping(); 
} 

public class ProxyClient : ClientBase<IMyServiceContract>, IMyServiceContract 
{ 
    #region Implementation of IMyServiceContract 

    public string Ping() 
    { 
     return Channel.Ping(); 
    } 

    #endregion 
} 

public class Test 
{ 
    // This assumes you have setup a client endpoint in your .config file 
    // that is bound to IMyServiceContract. 
    var client = new Client(); 

    System.Console("Ping replied: " + client.Ping()); 
} 

Malheureusement, cette action vise à la consommation WCF et ne fonctionne pas parfaitement avec le repos, à savoir qu'il n'expose pas les en-têtes HTTP, qui sont nécessaires pour une mise en œuvre RESTful.

+0

Il me manquait l'attribut [WebGet ....]. Je n'ai pas réalisé que c'était nécessaire sur le client. –