none
Problème d'imbrication de requêtes WCF (400 Bad Request) RRS feed

  • Question

  • Bonjour,

    Pour ce problème, nous avons 2 WebServices WCF utilisés en mode "webHttpBinding". Le premier a besoin de communiquer avec le second en JSON. J'ai donc défini l'attribut [WebInvoke(RequestFormat=WebMesageFormat.Json, ResponseFormat=WebMesageFormat.Json)] au niveau des OperationContract.

    Dans ce cas de figure, un appel au premier WebService qui appellera le second nous retourne une erreur de type "400: BAD REQUEST".

    Par contre, si je supprime l'attribut RequestFormat=WebMesageFormat.Json, ResponseFormat=WebMesageFormat.Json sur le second WebService, tout se déroule normalement. 

    Si je souhaite conserver la communication au format JSON, j'ai trouvé une autre parade, qui est d'imbriquer l'appel au second web service de cette façon:

    ServiceReference1 client = new ServiceReference(); // Create your client here !!!
    using (IDisposable channel = (IDisposable)client.InnerChannel) // Get WCF Channel from client
    {
       using (OperationContextScope contextScope = new OperationContextScope((IContextChannel)channel)) // Use this channel
       {
          response = client.DoWork("..."); // Call WebService here !!!
       }
    }
    Ainsi, tout fonctionne comme attendu. Ma question est donc de savoir si ce comportement est normal? N'y a-t-il pas d'effets de bord possible avec cette méthode?
    Merci.
    lundi 19 décembre 2011 09:34

Toutes les réponses

  • Bonjour Anthony,

    L'OperationContextScope est similaire à une "transaction", en utilisant se scope, tout appel fait au sein du scope se fait avec le même contexte (très pratique si on a besoin d'avoir des éléments en session asp.net par exemple). Cela ne pose problème que si vous voulez dissocier le contexte de l'appel au premier service de l'appel du second.

    Au sujet de votre erreur 400, à quel niveau la capurez vous? coté client du service1 ou dans la méthode du service1 qui appel le service2?


    Jérémy Jeanson MVP, MCP, MCTS http://blogs.codes-sources.com/JeremyJeanson/ (French or English spoken)
    lundi 19 décembre 2011 13:47
    Modérateur
  • Bonjour,

    Merci pour cette réponse.

    Je reçoit l'erreur 500 côté client, lors de l'appel au service1.

    C'est bien cela que je trouve étrange puisque l'appel entre le client->service 1 ne devrait pas changer selon le code effectué par ce dernier...

    C'est d'autant plus étrange que si je supprime l'attribut WebInvoke, tout fonctionne correctement...


    lundi 9 janvier 2012 10:04