Fermer

février 2, 2024

Utiliser Fiddler Everywhere avec les clients gRPC et .NET Core

Utiliser Fiddler Everywhere avec les clients gRPC et .NET Core


Découvrez comment utiliser Fiddler Everywhere lors de l’appel d’un service gRPC à partir d’un client .NET Core à la fois en tant que service RESTful sur HTTP/1 et de manière native sur HTTP/2.

Je pense que je peux toujours déboguer les applications de services Web sans utiliser Un violoniste partout … mais je ne voudrais pas avoir à le découvrir. Fiddler Everywhere continue de constater des améliorations en termes de fonctionnalités et de facilité d’utilisation. La version actuelle, par exemple, inclut la prise en charge des services gRPC, y compris le mode gRPC « natif » sur HTTP/2 et le mode « transcodé » sur HTTP/1.

J’ai envisagé de créer un Service gRPC avec prise en charge du transcodage à l’aide de Visual Studio avec .NET Core ailleurs. Cet article explique comment utiliser Fiddler Everywhere lors de l’appel d’un service gRPC à partir d’un client .NET Core via HTTP/1 et HTTP/2.

Configurer Fiddler partout

La prise en charge HTTP/2 pour l’utilisation de Fiddler Everywhere avec gRPC est automatiquement activée pour tous les utilisateurs. Si vous voulez vérifier cela, démarrez d’abord Fiddler Everywhere (à partir de maintenant, je l’appellerai simplement « Fiddler »). Après avoir démarré Fiddler, cliquez sur l’icône Paramètres dans le coin supérieur droit de la fenêtre Fiddler et, lorsque la boîte de dialogue Paramètres apparaît, cliquez sur l’onglet Connexions à gauche et assurez-vous que l’option Activer la prise en charge HTTP/2 est cochée.

À propos : si c’est la première fois que vous démarrez Fiddler, arrêtez-vous et prenez un moment pour a) regarder l’interface utilisateur de Fiddler montrant tout le trafic entrant et sortant de votre ordinateur et b) soyez étonné par la quantité de trafic qui entre et quitter votre ordinateur.

Par défaut, Fiddler Everywhere capture tout le trafic entre votre ordinateur et le réseau – vous pourriez être surpris de voir tout ce qui se passe déjà.

Vous êtes maintenant prêt à écrire votre code pour fonctionner avec Fiddler et avec le transcodage gRPC sur HTTP/1. Vous devrez ajuster votre code gRPC HTTP/2 par défaut pour fonctionner avec Fiddler et votre code RESTful HTTP/1 par défaut pour fonctionner avec un service gRPC transcodé.

Modifier votre code : gRPC

Si vous êtes pas en utilisant Fiddler Everywhere, vous utiliserez généralement un code comme celui-ci pour créer un objet GrpcChannel. Après avoir créé votre objet canal, vous transmettez ensuite cet objet canal à votre client gRPC dans le cadre de la création du client (le code de la classe client aura été généré pour vous à partir du fichier .proto de votre service gRPC). Ce code ressemblerait normalement à ceci :

GrpcChannel gChan = GrpcChannel.ForAddress("https://<URL for gRPC Service>")
GreeterClient gc = new MyGrpcClient(gChan);

Une fois Fiddler démarré, il configure un proxy par lequel passera tout votre trafic réseau, puis rend compte de ce trafic. Vous devrez modifier votre code gRPC pour bien jouer avec le proxy de Fiddler, ce qui signifie simplement ajouter le code supplémentaire affiché ici pour définir certaines GrpcChannelOptions lors de la création de votre objet de canal :

GrpcChannel gChan = GrpcChannel.ForAddress("https://<URL for gRPC Service>",
    new GrpcChannelOptions
    {
        HttpHandler = new HttpClientHandler()  
    });
GreeterClient gc = new MyGrpcClient(gChan);

Ajuster votre code : transcodage et HTTP/1

Avec votre code gRPC désormais compatible avec Fiddler, vous pouvez modifier votre code RESTful pour qu’il fonctionne avec un service gRPC en mode transcodage HTTP/1. Dans le passé, lorsque vous appeliez un service RESTful/HTTP 1, vous avez probablement écrit du code comme celui-ci dans .NET Core. Ce code utilise l’objet standard .NET HttpClient pour récupérer un HttpResponseMessage à partir d’un service RESTful, HTTP/1 :

   HttpClient hc = new HttpClient();
   HttpResponseMessage hrpm = await hc.GetAsync("http://<URL> for RESTful HTTP 1 Service>");

Bien que ce code soit idéal pour un service HTTP 1 natif, vous avez besoin d’un code légèrement différent pour travailler avec un service gRPC qui utilise le transcodage JSON pour se rendre disponible sur HTTP/1. Pour que votre .NET Core fonctionne avec votre service gRPC transcodé, vous devrez ajouter du code lors de la création de votre objet HttpClient pour spécifier la version du message de demande envoyé au service par votre objet HttpClient. Ce code ressemble à ceci :

HttpClient hc = new HttpClient() {
       DefaultRequestVersion = new Version(2, 0) 
   };
HttpResponseMessage hrpm = await hc.GetAsync("https://<URL> for gRPC Service");

Avec ces trois changements, vous serez en mesure de faire fonctionner votre projet .NET Core à la fois avec Fiddler Everywhere et avec un service gRPC dans toutes ses manifestations.




Source link