Απαιτήσεις: Στις αρχιτεκτονικές μικροϋπηρεσιών, οι κλήσεις μεταξύ υπηρεσιών χρησιμοποιούν συχνά το πρωτόκολλο HTTP, συνήθως χρησιμοποιώντας την κλάση HttpClient για την υποβολή αιτημάτων HTTP ή τη χρήση τουRefit.HttpClientFactory、WebApiClientCoreΒιβλιοθήκες τρίτων που βασίζονται στην ενθυλάκωση HttpClient.
Για περισσότερες πληροφορίες σχετικά με τη χρήση του HttpClient, ανατρέξτε στο:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Πηγαίος κώδικας HttpClient:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Στον κατασκευαστή χωρίς παραμέτρους HttpClient, το αντικείμενο HttpClientHandler δημιουργείται από προεπιλογή και το HttpClientHandler κληρονομεί και υλοποιεί την αφηρημένη κλάση HttpMessageHandler.Προεπιλεγμένη ροή: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...
Σύμφωνα με την ανάλυση του πηγαίου κώδικα, το αντικείμενο που κληρονομείται από το HttpMessageHandler είναι μια συγκεκριμένη υλοποίηση του HttpClient που στέλνει αιτήματα HTTP. Το HttpClient θαΜήνυμα HttpRequestMessageΤο αντικείμενο μεταβιβάζεται και στη συνέχεια λαμβάνεταιΜήνυμα HttpResponseMessageΤο αντικείμενο επιστρέφει περιεχόμενο.
Δοκιμάστε να δημιουργήσετε μια νέα κλάση TestHttpHandler, κληρονομώντας την κλάση αφαίρεσης HttpMessageHandler και υλοποιώντας τη μέθοδο SendAsync και, στη συνέχεια, να την δημιουργήσετε στον κατασκευαστή HttpClient, με τον ακόλουθο κώδικα:
Οπως φαίνεται παρακάτω:
Παρόλο που καλείτε το HttpClient για να στείλετε ένα αίτημα GET, η συγκεκριμένη υλοποίηση της μεθόδου SendAsync δεν στέλνει ένα αίτημα HTTP και δεν υπάρχει ροή δικτύου, επομένωςΜπορείτε να αποσυνδέσετε το καλώδιο δικτύου και το πρόγραμμα θα λειτουργήσει κανονικά。
σεΌταν χρησιμοποιείτε ένα αντικείμενο HttpClient, η υποκείμενη υποδοχή δεν απελευθερώνεται αμέσως, που μπορεί να προκαλέσει προβλήματα εξάντλησης της πρίζας. Η Microsoft γνωρίζει αυτό το ζήτημα και συνιστά τη χρήση του IHttpClientFactory σε έργα ASP.NET Core για τη δημιουργία αντικειμένων HttpClient.Το IHttpClientFactory συγκεντρώνει παρουσίες HttpMessageHandler που έχουν δημιουργηθεί από το εργοστάσιο σε μια ομάδα για να μειώσει την κατανάλωση πόρων. Όταν δημιουργείτε μια νέα παρουσία HttpClient, μπορείτε να χρησιμοποιήσετε ξανά την παρουσία HttpMessageHandler στο χώρο συγκέντρωσης(εάν δεν έχει λήξει η περίοδος επιβίωσης).
IHttpClientFactory για .NET:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Το ASP.NET Core έχει την έννοια του ενδιάμεσου λογισμικού αγωγών,Στην πραγματικότητα, το HttpClient έχει επίσης την έννοια του ενδιάμεσου λογισμικού διοχέτευσης με τη βοήθεια του Delegating Handler, όπως φαίνεται στο παρακάτω σχήμα:
Χρησιμοποιώντας αυτήν τη δυνατότητα, μπορούμε να υποκλέψουμε αιτήματα και απαντήσεις, όπως η αύξηση του ελέγχου ταυτότητας διακριτικού πριν από τα αιτήματα, η καταγραφή του χρόνου που απαιτείται για αιτήματα και απαντήσεις και η αναδίπλωση δεδομένων απόκρισης.
Απλώς κληρονομήστε την κλάση DelegatingHandler και παρακάμψτε τη μέθοδο SendAsync.
Η εγγραφή αιτημάτων HTTP απαιτεί χρόνο και ο κώδικας έχει ως εξής:
Καλέστε το IHttpClientFactory για να δημιουργήσετε ένα HttpClient και να στείλετε ένα αίτημα, όπως φαίνεται στην παρακάτω εικόνα:
(Τέλος)
|