2010-09-17 20 views
2

i utilise le code suivant pour communiquer avec un service REST:Communiquer avec un service de repos à l'intérieur d'un service REST

[ServiceContract()] 
interface ISomeService 
{ 
    [OperationContract()] 
    [WebGet()] 
    bool DoSomething(); 
} 

WebHttpBinding binding = new WebHttpBinding(); 
ChannelFactory<ISomeService> channelFactory = new ChannelFactory<ISomeService>(binding, "http://localhost:12000"); 
channelFactory.Endpoint.Behaviors.Add(new WebHttpBehavior()); 
ISomeService service = channelFactory.CreateChannel(); 
service.DoSomething(); 

Il fonctionne très bien dans les applications de test simples, mais dans mon application réelle que je veux l'appeler à l'intérieur mon propre service REST: Si un appel à mon service REST est effectué, mon service doit passer un appel à un autre service REST.

Et là, les choses vont bizarrement. Dans cette situation, le code ci-dessus ne fonctionne pas car s'il est placé dans une méthode de service, il envoie une requête POST au lieu d'une requête GET, ce qui entraîne bien sûr une erreur "Méthode non autorisée". Je n'ai pas l'attribut WebInvoke dans mon code.

[ServiceContract()] 
class MainService 
{ 
    [OperationContract()] 
    [WebGet()] 
    public void Test() 
    { 
     CallDoSomething(); // code from above: Sends POST instead of GET request 
    } 
} 

Comment peut-on modifier la méthode de requête HTTP?

+0

Dors '' ISomeService' ont [WebGet] 'ses activités? Du côté client. –

+0

Oui, il a [WebGet] des deux côtés :) J'ai ajouté une démo au post de départ. – pdb

Répondre