Développer avec. Services de stockage NET et Azure | Trevoir Williams | Skillshare
Recherche

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Développer avec. Services de stockage NET et Azure

teacher avatar Trevoir Williams, Jamaican Software Engineer

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Introduction

      0:34

    • 2.

      Comprendre le stockage Azure Blob

      5:33

    • 3.

      Comprendre le stockage de table et de queue

      2:58

    • 4.

      Créer un compte de stockage Azure

      4:41

    • 5.

      Émulateur de stockage Azure

      1:36

    • 6.

      Gestion de compte de stockage

      11:35

    • 7.

      Explorateur de stockage

      1:17

    • 8.

      Aperçu des applications Web

      1:22

    • 9.

      Créer et configurer . Projet de base NET

      4:12

    • 10.

      Ajouter un service de stockage de table

      10:21

    • 11.

      Créer des contrôleurs et des vues

      11:57

    • 12.

      Table de test Stockage CRUD

      4:23

    • 13.

      Ajouter le service de téléchargement Blob

      15:12

    • 14.

      Caractéristiques du service Blob

      13:03

    • 15.

      Ajouter un service en attente

      6:10

    • 16.

      Service de file d'attente

      2:07

    • 17.

      Journaux et appels de services

      1:47

    • 18.

      Configurer le lecteur de messages en file d'attente

      11:16

    • 19.

      Nettoyage et optimisation de codes

      13:19

    • 20.

      Conclusion

      1:43

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

9

apprenants

--

projet

À propos de ce cours

Ce cours exhaustif, "Développer avec. NET et Azure Storage Services », est conçu pour les développeurs de logiciels qui veulent améliorer leurs compétences en matière de création et de gestion des applications modernes en utilisant les outils de Microsoft. Services de stockage NET et Azure. En explorant des scénarios réels et des pratiques exemplaires, les étudiants acquerront les connaissances et l'expérience nécessaires pour exploiter pleinement le potentiel de ces puissantes technologies.

Au cours de ce cours pratique, les participants exploreront divers services de stockage Azure, comme le stockage Blob, le stockage de tables et le stockage en file d'attente tout en apprenant à les intégrer avec. Applications NET. Les étudiants seront compétents dans la création, la configuration et le déploiement d'applications robustes en utilisant les applications de Microsoft. Les services de framework NET, C # et Azure.

Rencontrez votre enseignant·e

Teacher Profile Image

Trevoir Williams

Jamaican Software Engineer

Enseignant·e
Level: Intermediate

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Introduction: Dans ce module, nous allons examiner vos comptes de stockage. Ce lundi, nous allons explorer les offres de comptes de stockage Azure. Nous allons examiner le stockage par blob, le stockage dans tables et le stockage dans les files d'attente. À terme, nous allons développer une solution qui interagira avec chacun de ces composants du stockage Azure. Donc, comme d'habitude, nous allons créer notre stockage ou nos cônes. Examinez les différentes options , explorez toutes les nuances et découvrez comment intégrer ces offres dans nos propres solutions. Alors restez connectés. Ce module va être amusant. 2. Comprendre le stockage Azure Blob: Pour commencer, nous allons commencer par examiner les offres de stockage Azure Blob. Azure Blob Storage est désormais un service basé sur le cloud qui permet de stocker des données non structurées telles que fichiers texte, des images, des vidéos, etc. Il s'agit d'une solution évolutive, sécurisée et très rentable pour stocker de grandes quantités de données. Et il prend en charge des fonctionnalités de sécurité telles que le cryptage, l'authentification et l'autorisation. L'intégration à Azure AD est intégrée et vos données seront cryptées à la fois en mouvement et au repos. Les données sont accessibles via protocoles HTTP ou HTTPS partout dans le monde, ce qui en fait un candidat idéal pour les réseaux CDN. Donc CBN, ces lettres signifient Content Delivery Network. Grâce à cette flexibilité, Blob Storage est donc parfait pour cela. L'intégration ou la création d' applications prenant en charge l'offre de stockage Blob est très simple. Si vous utilisez dotnet, Ruby , Java, Python et plusieurs autres frameworks, vous pouvez toujours vérifier si le framework approprié est là pour votre référence. Mais bien sûr, ce sont les scores des développeurs de Dotnet et cela nous couvre. Il est désormais couramment utilisé pour les scénarios dans lesquels nous souhaitons envoyer des images ou des documents directement dans le navigateur. Nous devons faciliter l' accès distribué à un ensemble de documents. Si vous souhaitez diffuser du contenu tel que de la vidéo et de l'audio, si vous souhaitez stocker des fichiers journaux et en continu, directement ces fichiers journaux. Ou si nous voulons stocker des données à des fins de sauvegarde, reprise après sinistre et d'archivage. Si vous vous intéressez à la science des données et au Big Data, vous vous rendrez compte qu'il existe une offre appelée Azure Data Lake Storage Gen2, qui est la solution d'analyse des mégadonnées d' entreprise de Microsoft pour le cloud. Cela offre un système de fichiers hiérarchique, ainsi que les avantages du stockage Blob. Ces avantages incluent le fait qu'il est peu coûteux, il offre une disponibilité de stockage hiérarchisée, une cohérence élevée et des fonctionnalités de reprise après sinistre. Nous venons de mentionner les niveaux de stockage. Il existe donc trois types de niveaux de stockage. Le premier que nous examinons est ce niveau de stockage très actif qui est utilisé pour les analystes de données fréquemment consultés. Vous verrez que ce sont les options les plus coûteuses. Donc, si vous savez que vous allez toujours accéder au stockage Blob pour accéder à ce fichier, peut-être à des vidéos diffusées , à du son diffusé. Dans ce cas, vous devriez le placer sur le niveau de stockage à chaud. Ensuite, nous avons le niveau de stockage cool, qui est utilisé pour les données les moins fréquemment consultées. Et bien sûr, c'est un peu moins cher que le hot car il n'y a pas de trafic sur le ou les fichiers. Ainsi, chaque fois que vous essayez d'accéder à un fichier, le chargement du fichier peut prendre un peu plus de temps. Mais bien sûr, cela est préférable pour les fichiers qui doivent être stockés à long terme et avec lesquels il n'est pas nécessaire d'interagir autant. Ensuite, nous avons le niveau d'archivage, qui concerne les données rarement consultées. Cela concerne donc les fichiers que les organisations doivent généralement conserver des fichiers ou des enregistrements pendant une durée maximale de sept ans. Très bien, vous devriez donc archiver des fichiers. Peut-être qu'après la troisième année, vous pourrez les mettre dans des archives , car vous n'y aurez pas autant accès. Et si vous y accédez, cela prendra beaucoup plus de temps. Il va falloir réhydrater ce fichier ou cette goutte, puis cela le ramènera. Bien entendu, elle est utilisée pour les sauvegardes étendues et c'est l'option la moins coûteuse. Désormais, un deux-points de stockage comporte au moins deux composants principaux que vous pouvez voir dans tous les autres types de stockage. Mais puisque nous parlons de gouttes, je vais en quelque sorte adapter l' inflammation par rapport aux gouttes. La première chose que vous avez, ce sont les comptes réels. Cela fournit désormais un espace de noms dans Azure pour vos données et chaque objet que j'utilise stocké dans Azure Storage aurait une adresse qui inclut ce nom de compte unique. Ensuite, nous avons le conteneur et notre conteneur organise tous les blobs de la même manière que vous vous attendriez à un système de fichiers tel que Windows ou Linux organise vos fichiers. Ce type de hiérarchie de structure de dossiers est à votre disposition dans notre conteneur. Le blob représente alors un fichier physique qui est stocké à l'intérieur du conteneur. Un diagramme montre cette hiérarchie. Il existe plusieurs types de blobs. blob est un blob, je veux dire, c'est un fichier qui est stocké dans ce stockage ou dans des cônes, mais les différents blobs doivent être traités différemment pour différentes raisons. Le premier que nous avons est donc un blob, qui est probablement le plus courant. Nous les utilisons pour stocker du texte ou des données binaires. Et il est composé de blocs de données qui peuvent stocker jusqu'à 190,7 trilobites, non pas du terrorisme, mais des octets Tilly. Ensuite, nous avons ajouté des blobs. Maintenant, cela comporte des blocs similaires aux blobs. Eh bien, ils sont optimisés pour l'opération d'ajout. Cela serait donc idéal pour un scénario dans lequel nous devons enregistrer des données depuis une machine virtuelle ou dans votre App Service. Si vous vous souvenez, lorsque nous étions assis sur la journalisation de l'App Service, nous aurions pu choisir de nous connecter à un blob, n'est-ce pas ? C'est donc ce que nous utiliserions. Cela fournirait un Append Blob pour cette situation. Le type suivant serait celui des blobs de page. Les blobs de page stockent des fichiers à accès aléatoire d'une taille maximale de 8 Ko Ces fichiers sont généralement utilisés comme fichiers de disque dur virtuel pour nos machines virtuelles dans Azure. Ensuite, examinons votre rangement de table. 3. Comprendre le stockage de table et de queue: Désormais, votre stockage de tables est un service qui stocke des données non relationnelles ou non structurées, également appelé SQL. Et encore une fois, il s'agit d'un service cloud qui nous permet de stocker les attributs clés dans une conception sans schéma. Vous devriez maintenant être référencé comme votre espace de stockage de tables lorsque nous examinons d'autres bases de données Cosmos. Et c'est l'une des API prises en charge par Azure Cosmos DB. Ainsi, si vous commencez avec des tables de stockage Azure ou plutôt avec Table Storage, et que vous devez ensuite migrer pour plus de stockage et de redondance, vous pouvez passer à Cosmos DB. Mais c'est un excellent point de départ. Si vous n'êtes pas certain de vos besoins en matière de données et que vous devez être en mesure de vous adapter à de nouvelles exigences en matière de détail, il s'agit d'une excellente solution pour commencer, car elle ne comporte aucun schéma et pourra donc toujours évoluer en fonction de vos besoins. L'accès est désormais rapide et rentable et il est généralement inférieur à celui des autres offres SQL pour des volumes de données similaires. Vous pouvez également considérer que si vous souhaitez commencer par notre instance relationnelle ou Azure SQL, et que vous savez que vous n'allez pas stocker autant de données à avance, vous pouvez commencer par des tables, puis augmenter. Mais bien sûr, toutes ces choses affecteront vos décisions. Le type de stockage suivant est le stockage en file d'attente. Il s'agit maintenant d'un service permettant de stocker grand nombre de messages. Ces messages sont accessibles n'importe où par le biais appels authentifiés via HTTP ou HTTPS. En gros, lorsque vous configurez votre stockage dans la file d'attente, vous obtenez un lien qui vous permet de vous abonner au stockage et de lire et d' écrire des messages hors de la file d'attente. La taille du message de file d'attente peut atteindre 64 Ko. Et vous pouvez recevoir autant de messages que possible en fonction de la limite de capacité de votre stockage ou de vos cônes. D'une manière générale, vos repères, stockage ou vos files d'attente en général sont utilisés pour créer un arriéré d'éléments de travail. Le processus est asynchrone. Cela signifie que, si vous créez une application qui doit envoyer un e-mail, souhaitez-vous que l'application s' arrête pendant que vous vous connectez au serveur de messagerie, déterminez le contenu de l'envoi du courrier électronique, du courrier électronique, attendez de voir s'il a été envoyé avec succès, puis l'utilisateur peut continuer, peut-être pas. IQ vous permettrait donc de récupérer ces informations transmises et de poursuivre votre candidature. Ensuite, vous auriez un autre service qui retirera probablement ce message de la file d'attente et finira par envoyer l'e-mail afin que nous, l'expérience utilisateur, ne soit pas affectée. Et ce n'est qu'un exemple. Les files d'attente peuvent être utilisées de différentes manières, en particulier s'il s' agit de microservices. Mais nous allons passer en revue quelques exemples avec ce genre de choses. Je vous verrai donc dans la prochaine leçon, où nous commencerons. 4. Créer un compte de stockage Azure: À partir de notre portail, nous allons créer un nouveau compte de stockage. Alors allons-y directement. Nous allons passer à nos pilules et choisir Créer une ressource. Et à partir de là, nous allons chercher du rangement. Je peux donc simplement taper dans le champ de stockage, appuyer sur Entrée et OK, utilisons simplement le compte de stockage à saisie semi-automatique. Nous voulons stocker des cônes, alors sélectionnons-le et créons-le à partir de là, remplissons notre formulaire comme d'habitude. Comme ce stockage est un service géré par Microsoft qui inclut les données Blob Storage, Lake Gen2, Azure Files. Nous n'avons pas vraiment parlé d'Azure Files, mais je vais expliquer cela un peu. Files d'attente et tables. Non, il est important que vous définissiez ces paramètres correctement, car certains éléments seront disponibles en fonction de votre niveau et du type de compte de stockage que vous configurez. Comme d'habitude, la première chose à faire est donc de sélectionner le groupe de ressources du panier. Alors allons-y et faisons-le. Ensuite, en ce qui concerne le nom du stockage, je vais dire que, comme vous êtes un cheval, je vais bien sûr choisir la meilleure zone en fonction de mes besoins en matière de solutions. Ensuite, nous pouvons choisir une performance. Voulons-nous donc le standard, qui est le scénario recommandé, ou voulons-nous le premium, qui comprend quatre scénarios nécessitant une très faible latence Donc, pour cette démo, nous allons garder le standard. Bien entendu, si vous avez d'autres besoins, vous choisissez celui qui vous convient. Également pour la redondance. Je vais juste choisir la redondance locale. Et la redondance, un élément que vous devez également toujours prendre en compte pour chaque service , en fonction de vos besoins. Je vais donc choisir un stockage local redondant. Passez à l'option suivante. Je vais laisser tout ce qui était coché, je vais le laisser coché. Et puis, si nous faisions des opérations de mégadonnées, nous pourrions choisir un Data Lake Gen2 pour noms hiérarchique, c'est que nous n' effectuons aucune opération de mégadonnées Je vais donc laisser cela de côté. Et puis, lorsque nous faisons défiler la page vers le bas, nous pouvons voir nous voulons le chaud ou le frais ? N'oubliez donc pas les touches de raccourci pour les scénarios d'utilisation quotidienne fréquemment utilisés. Peut-être comme un CDN. est peut-être là que toute l'organisation stocke les fichiers, lit et écrit. Par rapport au stockage cool, où vous placeriez probablement des fichiers accessibles de temps en temps. Très bien. Ensuite, nous avons les fichiers Azure. Ainsi, vos fichiers sont une fourniture du compte de stockage qui nous permet de partager des fichiers entièrement gérés dans le Cloud. Ils sont également accessibles via les normes du secteur, protocoles Server Message Block ou SMB, le système de fichiers réseau ou les protocoles NFS, ou même simplement une API RESTful. Dans un anglais plus clair. En effet, vos fichiers ressembleraient à un partage de fichiers dans le cloud que vous pourriez configurer pour votre organisation afin de remplacer le partage local. Donc, comme nous ne facilitons pas les partages de fichiers, je n'autoriserai ni n' activerai les partages de fichiers volumineux. Ensuite, nous pouvons passer à mise en réseau et à tout ce qui s' y trouve, le problème est grave. Protection des données. Nous pouvons donc définir ici des options pour traiter les données. Je vais laisser les valeurs par défaut cochées, mais je vous encourage à lire chacune d'elles juste pour voir ce qu'elle dit et à modifier ces valeurs en fonction des besoins urinaires. Bien sûr. Nous pouvons également activer le suivi des versions pour nos blobs. Si vous avez plusieurs fichiers, existe plusieurs versions d'un fichier, il conservera ce journal. Et vous pouvez activer un flux de modifications juste au cas où vous auriez besoin d'un service qui doit s'abonner à l'état blob. OK, eh bien, cette modification, je dois déclencher une action. Ce sont donc des éléments que vous pouvez prendre en compte si vous souhaitez automatiser d' autres flux de travail en fonction des blobs et des activités effectuées sur vos blobs. Maintenant, lorsque nous passons au chiffrement, j'ai déjà mentionné que les données sont cryptées au repos et en transit. Ils ne font donc que vous montrer le type de cryptage. Je vais laisser les valeurs par défaut, puis nous pourrons choisir les services qui prennent en charge les clés gérées par le client, et je les laisserai par défaut. Donc, encore une fois, la prochaine étape serait nos tags. Quoi ? Je vais juste passer à la revue. Et une fois cet examen terminé avec succès, nous pouvons créer notre compte de stockage. Une fois le déploiement terminé, nous pouvons cliquer sur Accéder à la ressource. Et une fois sur place, nous verrons notre stockage blob ou notre compte de stockage créé. Et à partir de là, nous pouvons faire plusieurs choses. Ainsi, à notre retour, nous explorerons les différentes options et bloquerons les interactions avec les différents composants de notre compte de stockage. 5. Émulateur de stockage Azure: Il convient maintenant de mentionner que nous avons accès à un émulateur local pour le stockage Azure, appelé azurite. Et c'est open source et multiplateforme. Vous avez donc plusieurs options d'installation et vous verrez ici qu'il fournit un support multiplateforme sous Windows, Linux et macOS. Et cela nous permet d'accéder gratuitement en local à un environnement pour tester le stockage Blob, le stockage file d'attente et le stockage de tables. Ainsi, toutes les activités que nous sommes sur le point de réaliser impliquant tous ces services pourraient être réalisées si nous mettions en œuvre notre offre, cet émulateur local pour ces services. Maintenant, la configuration des services est relativement facile. Si vous utilisez Visual Studio 2022, vous l'obtenez automatiquement. Si vous utilisez Visual Studio Code, vous pouvez l'obtenir pour les extensions. Si vous utilisez npm, vous pouvez exécuter une commande si vous utilisez plus sombre que vous ne pouvez extraire cette image et l'installer. Et vous pouvez toujours accéder directement au dépôt Git d'Azurite et le cloner. Et pour l'exécuter, vous pouvez interagir avec Azurite de plusieurs manières si vous utilisez Visual Studio, Visual Studio Code, etc. Vous pouvez donc parcourir cette documentation si vous souhaitez simplement configurer un environnement local. Ensuite, vous pouvez y accéder. Sachez que nous allons explorer l'explorateur de stockage plus en détail au fur et à mesure que ce module avancera. Mais je voulais simplement le souligner afin d' accéder à l'environnement local et simuler des interactions avec chacun des différents composants d'un compte de stockage. 6. Gestion de compte de stockage: Ainsi, à partir de ce tableau de bord, vous pouvez voir que plusieurs options que nous n'avons peut-être pas activées ou que nous n'avons peut-être pas activées et que nous voulions probablement désactiver ultérieurement peuvent être modifiées ici. Donc, si je voulais changer le niveau d'accès par défaut de chaud à froid, je pourrais facilement cliquer dessus , puis le modifier. Certaines choses ne peuvent pas être modifiées ou vous pouvez simplement passer à et modifier les performances par rapport à la version standard ou supérieure. Mais vous pouvez modifier d' autres options. C'est donc plus tard qu'il a décidé ou l'organisation a décidé qu' elle devait autoriser les fichiers volumineux. Et vous verrez ici qu'il prend en charge stockage rapide allant jusqu'à 100 Ko. Tu pourrais y aller et le faire. pourrait également modifier les cours de cette action ici, mais nous allons laisser les choses en suspens pour le moment. Plus tard, nous pouvons soit supprimer la ressource, soit la déposer à un niveau plus cool. Revenons maintenant à notre volet d'aperçu, nous voyons que nous avons la possibilité d'ouvrir dans un explorateur. Si nous cliquons sur Ouvrir l'Explorateur, vous verrez que c'est quelque chose que vous pouvez télécharger qui vous permettra de gérer vos fichiers vos conteneurs et tout le reste depuis votre ordinateur. Nous pouvons également utiliser un navigateur de stockage. Nous pouvons donc cliquer sur le navigateur de stockage et cela nous amènera à interface suffisamment similaire qui nous indique le nombre de conteneurs, de partages de fichiers, de tables et de files d'attente dans le système. Nous pouvons également poursuivre et interrompre avec ces composants. Je peux donc continuer et créer un nouveau conteneur ici. Et je vais appeler ce conteneur. C'est bien sûr un conteneur. Je peux définir le niveau d'accès si je veux qu'il soit privé pour que personne d'autre n' y accède, ou blob pour un accès en lecture pour les blobs uniquement ou un conteneur avec un accès anonyme en lecture/écriture pour les blobs continus et les blobs. Maintenant, laissez cela privé. Et à l'avance, je peux définir l'étendue du cryptage et le support d'immuabilité. Je vais simplement cliquer sur Créer. Maintenant, une fois que ce blob a été créé ou que ce conteneur a été créé, je peux accéder au conteneur et ajouter un répertoire ou télécharger un fichier. Rappelez-vous maintenant que le conteneur est l'endroit où les fichiers sont réellement acheminés et qu'il essaie de vous donner cette vue hiérarchique des fichiers et une vue des dossiers ou des répertoires entre guillemets si nécessaire. Je peux donc ajouter un répertoire et l'appeler nouveau répertoire. Vous, est-ce que c'est un arbre grossier ? Nous y voilà. Ensuite, à l'intérieur de ce répertoire improvisé, je peux ajouter tous les répertoires si je le souhaite ou je peux simplement les télécharger. Ainsi, lors du téléchargement, je peux choisir remplacer ceux qui existent déjà, je peux glisser-déposer ou rechercher des fichiers. Ensuite, lorsque je regarde le mode avancé, je peux choisir le type de blob que je suis en train de télécharger. Il y a donc un blob, blob de page ou un blob d'ajout. En général, je ne change pas cela car je ne télécharge que des blobs de blocs. Vous pouvez également choisir la taille du bloc si vous souhaitez accéder aux stéréotypes. Donc, s'il fait chaud, cool ou archivé, et que nous pouvons télécharger un dossier, nous pouvons faire plusieurs choses. Je vais donc simplement faire un téléchargement. Et je suis en train de télécharger un PDF aléatoire que j'ai trouvé sur mon ordinateur. Rien de trop chic. Et voilà, nous l'avons. Je viens de télécharger mon premier fichier Blob et c'est un accès rapide. Bien sûr, je peux le modifier. Je peux obtenir une URL, je peux générer un jeton SAS. Et nous allons examiner tout et ce qu'ils signifient. Et je peux même supprimer. Rappelez-vous maintenant que cela a activé la suppression logicielle. Si je le supprime, je peux revenir en arrière et afficher les blobs actifs et supprimés, ce je peux revenir en arrière et afficher qui ramènera tout ce que j'ai supprimé. Cela me montrera, et c'était le cas, la durée pendant laquelle il est conservé. Et puis devinez quoi ? Je ne peux en fait pas le supprimer. Si je clique avec le bouton droit de la souris, je peux cliquer sur Supprimer et le fichier sera restauré. C'est donc une bonne petite solution de sécurité si nous supprimons accidentellement des fichiers. Non, n'oubliez pas que les partages rapides nécessiteront un peu plus de détails lors de la configuration, mais c'est un excellent moyen de déplacer votre partage de fichiers depuis votre ordinateur local ou fascia de votre organisation depuis les serveurs locaux et de les placer dans le cloud. Et cela est particulièrement utile pour les pays qui ont besoin d'un accès distribué au même ensemble de fichiers. Très bien, donc si vous souhaitez un partage de fichiers privé pour notre configuration distribuée avec des redondances en place, c'est une excellente option pour vous. Passons aux indices. Quoique. Je suis allée ajouter une nouvelle file d'attente, et je vais dire que c'est un cheval. Q. Allons-y et cliquez sur OK. Ensuite, vous verrez apparaître le corps de l'URL. Nous allons donc nous contenter, lorsque nous ferons du développement, regarder l'URL de notre conteneur Blob, les blobs et tout le reste. Mais pour l'instant, nous ne faisons qu' un aperçu du compte de stockage. Donc, à partir de cette URL de file d'attente, je peux m'abonner à ce biais et mettre des messages dans la file d'attente. Je peux lire les messages hors de la file d'attente maintenant et nous disons « message ». Que voulons-nous dire exactement ? Lorsque je sélectionne la file d'attente, je peux cliquer sur Ajouter un message. Donc, si j'ajoute un message et que je dis qu'il s'agit d'un message de test aléatoire. Et je peux définir la durée, elle devrait expirer. Et donc dans les sept jours, si ce message n'est pas traité, supprimez-le. Bien entendu, encore une fois, vos besoins seront différents, vous choisissez donc celui qui convient à vos besoins. Vous pouvez également voir que le message arrive à expiration. Ainsi, une fois qu'un message est égal à moins de Q, ne le supprimez jamais tant qu' il n'est pas traité. Ça va ? Et puis vous diriez encoder, nous voudrions le faire. Je vais cliquer. D'accord. Donc, lorsque je clique sur OK, nous avons maintenant un message dans cette file d'attente. Et encore une fois, lorsque nous parlons de messages, nous parlons de données qui doivent être traitées. Donc, comme vous pouvez le voir, ce message est en réalité qu'un texte. Et j'ai accidentellement ajouté le même message deux fois. Il suffit de le faire, d'accord, donc cela pourrait être une phrase. C'est peut-être un trésor. Il peut même s'agir d'un objet JSON, qui est un moyen très populaire de transporter des données telles que des corps de données vers des indices. Donc, ce qui pourrait se passer ici, c'est que vous pourriez envoyer un bloc de JSON, objet JSON sous forme de sticks. Ensuite, vous pouvez utiliser un service tiers ou autre service pour traiter réellement ce message JSON, qui contiendra toutes les informations nécessaires à une opération à portée de main. Plusieurs choses et plusieurs façons d'utiliser les indices. Encore une fois, les files d'attente sont principalement utilisées pour décharger des processus susceptibles de retarder l' exécution effective des applications. Il est donc plus rapide de réutiliser l'exemple d'e-mail, de transférer le corps du message, qui aurait pu être cet objet JSON avec l'expéditeur aux adresses e-mail du destinataire, puis le corps du message et tout le reste dans la file d'attente , puis de poursuivre avec l'application. Et puis en arrière-plan, ce message finira par être retiré de la file d'attente et envoyé. Quand je dis ventralement, je veux dire que cela peut arriver. voyez, en même temps, cela pourrait arriver 20 e-mails Vous voyez, en même temps, cela pourrait arriver 20 e-mails plus tard, si des centaines d' utilisateurs envoient des e-mails dans le système, vous ne voulez pas que des centaines d' utilisateurs et que celui-ci attend le système. Nous allons examiner quelques exemples dans la suite de ce cours de plusieurs manières allons examiner quelques exemples dans la suite de . C'est donc tout ce que nous ajoutons à la file d'attente. Et bien sûr, nous pouvons effacer la file d'attente et nous pouvons également envoyer un message dq. Je pourrais donc cliquer sur ce message et dire dq. Maintenant, la prochaine étape serait celle des tables. Table Storage, encore une fois, est une conception sans schéma. Je peux donc cliquer sur Ajouter une table, lui donner un nom. Et partout où vous me voyez ne pas utiliser de tirets, car certains services ont conventions de dénomination plus strictes et d'autres, donc certains autorisent les traits d'union, d'autres non. Vous allez donc le découvrir au fur et à mesure. Il vous indiquera toujours si vous enfreignez la convention de dénomination. Mais lorsque je clique sur OK, cela crée un nouveau tableau. Et puis, une fois de plus, nous obtenons une URL pour cette table où nous pouvons nous abonner pour saisir des données et lire des données à partir de la table. Et puis, si je clique sur la ressource elle-même, nous avons une disposition très similaire à celle que nous avons vue lorsque nous utilisions Azure Cosmos DB. Nous avons des clés de partition, des clés de ligne et il y aura un horodatage. Donc, en gros, lorsque je clique sur Ajouter une entité, j'ai la possibilité de donner une clé de partition et une clé de ligne, et je peux ajouter d'autres propriétés en conséquence. Très bien, allons-y et ajoutons une nouvelle entité. Disons maintenant que je voulais stocker des produits d'épicerie. Et ce que je vais faire ici, c'est voir que la clé de partition est la catégorie du produit. Donc, si je stocke un produit laitier, et que la propriété numéro un, disons, est le prix. Ensuite, je peux choisir le type de données. Le prix serait donc le double. Disons que cela coûte 2,50$. Et puis le suivant serait le nom de l'article. Je ne sais pas pourquoi j'ai mis la presse avant le nom, mais disons simplement que c'est du lait. Et puis insérez. Maintenant, j'aurais pu générer une nouvelle clé de ligne. J'aurais pu mettre un arc, j' aurais utilisé un GUID. J'ai volontairement laissé ce champ vide, mais je vous montre simplement les points suivants : nous pouvons saisir notre clé de partition et notre clé de ligne, mais nous pouvons ensuite saisir autant d'autres colonnes et valeurs de colonne que saisir notre clé de partition et notre clé de ligne, mais nous pouvons ensuite saisir autant d'autres colonnes et valeurs de colonne pairs d'attributs clés d'une paire de valeurs clés sont pairs d'attributs clés selon nos besoins et, comme nous l'avons dit, mesure que vos besoins augmentent. Encore une fois, les données me permettent d'ajouter une autre entité. Peut-être plus tard , je me suis rendu compte que je devais stocker plus de propriétés que le prix et le nom, n'est-ce pas ? Donc, si cette fois c' était disons agrafe, et donnons-lui une touche de ligne, cette fois. Et puis le prix est de dix. Disons que le nom est pain. Et de quoi d'autre aurions-nous besoin pour le stocker ? Peut-être que je veux vraiment le mettre dans une catégorie. Encore une fois, c'est un incontournable. Peut-être une date d'expiration. Je suis juste en train d' inventer des choses correctement. Parce qu'une fois de plus, vos besoins seront différents. La date d'expiration indique l'heure, non ? Vous choisissez donc la valeur de données appropriée, puis je saisis une date d'expiration et je supprimerai simplement la dernière. Disons donc que c'était un nouveau look. À mesure que nos besoins augmentent, le nombre de colonnes que nous pouvons insérer augmentera, ou peut augmenter avec très peu de conséquences. Et c'est de là que vient cet aspect d'absence de suite. Cela semble donc toujours relationnel, mais nous avons toujours cet avantage de concevoir des listes de schémas. Notre visite guidée de notre compte de stockage est terminée. À notre retour, nous verrons comment créer des solutions qui interagissent avec ces différents composants. 7. Explorateur de stockage: Maintenant, si vous choisissez d'utiliser l'Explorateur de stockage, vous obtiendrez les images de Visual Studio, désolé, comme dans Data Studio. Tout d'abord, vous souhaiterez peut-être gérer nos cônes et vous authentifier en conséquence. Et une fois que vous êtes authentifié, vous pouvez accéder à votre stockage ou à vos cônes. Ainsi, une fois que vous aurez réglé votre authentification, vous pourrez accéder aux différentes parties. Voici donc le compte de stockage que nous avons créé plus tôt. Encore une fois, nous pouvons l'approfondir et examiner les différents partages de fichiers, les indices, les tableaux, toutes les ressources que nous avions examinées précédemment. Vous pouvez même en voir d'autres que vous n'avez pas vus dans l'Explorateur du navigateur. Vous pouvez donc y aller et le faire. Et toutes les options que vous aviez dans le navigateur sont également disponibles ici. Vous pouvez donc réellement gérer vos fichiers, vos blobs, vos dossiers, tout ici. Et c'est encore mieux pour la gestion machine à machine du Blob Storage. Je pense donc que se procurer le Storage Explorer est une très bonne idée. Et cela rend la gestion de votre stockage de cônes beaucoup plus facile que d'avoir à accéder au navigateur à chaque fois. 8. Aperçu des applications Web: Nous allons maintenant développer une application Web qui vous permettra d'utiliser les différents composants que nous fournissent le stockage ou les cônes. Notre idée de projet Web a donc été de créer un formulaire d'inscription pour les participants à la conférence. Nous allons utiliser asp.net, MVC. Cette fois, nous avons utilisé les pages Razor, vous avez utilisé Blazer, nous allons utiliser MVC. Mais encore une fois, une fois Dotnet Core, les concepts seront transférables. Sachez que nous allons utiliser Azure Table Storage pour stocker le registre et cliquer sur Soumettre. Nous allons stocker ces données dans cette table de stockage. Nous allons les autoriser à télécharger une image. Pour ce téléchargement d'image, nous utiliserons Azure Blob Storage. D'accord, donc généralement, vous le stockez localement, mais nous ne voulons pas qu'il soit stocké localement sur le serveur. Nous allons le transférer en tant que stockage Blob. Nous allons utiliser le stockage Azure Queue parce que nous voulons envoyer un e-mail. J'ai donc utilisé cet exemple plus tôt dans cette partie du cours. Nous envoyons un e-mail, c'est quelque chose qui nécessite le gel, faire, puis passer à autre chose. Nous allons donc simplement le remettre à la file d'attente. Ensuite, nous allons créer une application console qui simulera un client qui lirait la file d'attente, puis traiterait le message ou les données de courrier électronique de la file d'attente pour les envoyer. Nous allons donc faire toutes ces choses à venir. 9. Créer et configurer . Projet de base NET: Donc, en utilisant la même solution que celle que nous avons utilisée pour l'ensemble de ce cours, j'ai voulu créer un nouveau projet. Bien entendu, cela est facultatif. Si vous souhaitez séparer chacune d'elles dans sa propre solution, vous pouvez continuer. Et encore une fois, j' utilise Visual Studio. Vous pouvez également suivre si vous utilisez Visual Studio Code. Alors allez-y et créez un nouveau projet. Et cette fois, je vais utiliser une application Web MVC. Je vais donc simplement taper les lettres MVC dans la recherche, puis choisir ASP Core Web up with Model View Controller. Ensuite, je vais appeler ce compte de stockage MVC Demo. Ensuite, tout peut rester par défaut. Ensuite, nous créons Si vous utilisez la terminologie de Visual Studio sous Linux ou Mac OS, vous pouvez accéder au répertoire de votre choix. Et puis vous pouvez dire dotnet, nouveau MVC. Ensuite, vous pouvez le publier dans un répertoire avec le nom du projet. Ensuite, vous pouvez continuer et appuyer sur Entrée. Maintenant que le projet a été créé, allons-y et ajoutons certaines des bibliothèques avec lesquelles nous devrons travailler. Et bien sûr, nous connaissons les différentes manières dont nous pouvons ajouter des bibliothèques. Mais je vais simplement utiliser les terminaux car le terminal fonctionnera pour tout le monde, que vous soyez dans Visual Studio ou Visual Studio code. Je vais donc dire dotnet ajouter des packages ou plutôt ajouter un package. Ensuite, le premier package que nous ajoutons est Azure Storage Blobs. Nous pouvons donc simplement appuyer sur Entrée. Très bien, et une fois que cela sera inséré avec succès, je vais simplement effacer l'écran. Et puis cette fois, nous ajoutons files d'attente de stockage à point zéro. Enfin, nous allons ajouter des tables de données à point zéro. Très bien, donc dotnet ajoute un package en tant que tables à points de données. Maintenant que nous avons toutes ces configurations, ajoutons notre chaîne de connexion de stockage, notre chaîne de connexion de stockage ou notre chaîne de connexion deux-points. Je vais juste passer aux paramètres de l'application, Jason, laisse-moi la cacher, au terminal pour que nous puissions obtenir plus de biens immobiliers. Et je vais juste appeler cette chaîne de connexion de stockage. Ensuite, la valeur de notre chaîne de connexion de stockage proviendra de notre portail. Passons donc à notre portail. Et puis nous sommes passés à l'hémorragie des clés d'accès. Ensuite, nous allons sélectionner la chaîne de connexion. Je vais donc simplement afficher Copier dans le presse-papiers, revenir à notre code, puis nous pouvons le coller. Dans. Nous y voilà. Mon bloc-notes n'était donc pas encore prêt. C'est donc notre chaîne de connexion. Et je vais créer un nouveau dossier. Et ce nouveau dossier va stocker notre modèle de données pour les tables de stockage. Je vais donc simplement appeler cela des données. Conformément à notre convention de dénomination déjà établie, nous allons ajouter une nouvelle classe. Et je vais juste appeler ce participant. Sachez que, comme nous allons utiliser Table Storage, nous devons procéder à la mise en œuvre de interface de l'entité informatique. Les participants hériteront donc emblée de l'entité i table. Et cela nous vient de notre classe de tableaux de données. Ensuite, en utilisant les points de contrôle, je peux implémenter l'interface. Cela nous donne donc maintenant ces colonnes spécifiques, n'est-ce pas ? N'oubliez pas que ces colonnes existaient avant que nous ne commencions à ajouter d'autres attributs. Bien sûr, je peux juste nettoyer ça et les laisser récupérer B, je reçois et le set, prêt. Et supprimez tout cela grâce à de nouvelles exceptions implémentées. Très bien, après avoir nettoyé tout cela, ajoutons nos propres propriétés. Cela m'aide donc. J'ai donc un nom et je voudrais probablement que prénom soit séparé du nom de famille. Et insérons une adresse e-mail. Et de quoi d'autre auriez-vous besoin pour mieux connaître les participants ? Travaillons là-dessus pour le moment. Donc, selon nos exigences, CMS signifiera en mettre plus. Mais commençons par ceci. 10. Ajouter un service de stockage de table: Configurons maintenant notre service de stockage de tables. Je vais donc créer un nouveau dossier, et je vais appeler celui-ci services. Et ici, je vais créer une nouvelle classe. Et cette classe s' appellera Table Storage Service. Et tant que je suis ici, je vais juste faire un ajustement rapide. Je pense que je vais juste nuancer un peu cela et l'appeler entité participante. Juste pour que ce ne soit pas juste dix jours. Ce ne sont que mes petits ajustements. Si vous ressentez le besoin de le faire également, faites-le. Je suis juste en train de le renommer ici et de renommer le fichier pour tenir compte de l'âme de l'entité, de nos méthodes ici , je vais l'avoir, et je vais juste écrire au public. Désolé, je vais d' abord écrire les noms de toutes les méthodes , puis nous remplirons les blancs. Je me suis donc lancé dans une tâche qui va renvoyer l'entité participante. Et cette tâche s' appellera get attendee. Ça va ? Et il faudra identifiant de chaîne d'identification parce que j'ai l'intention d' utiliser des produits pour l' identifiant. De bonnes valeurs. Nous allons donc faire en sorte que de bons participants obtiennent des participants, ce qui reprendra un ancien paramètre. Ensuite, cela renverra une liste des entités participantes. Et puis deux autres méthodes, l'une pour modifier et l'autre pour supprimer. Ainsi, entre ces méthodes, nous avons une fonctionnalité complète. Je vais juste l'extraire dans une interface afin que nous ayons cette abstraction et cet héritage. Nous y voilà. Maintenant, nous pouvons commencer à le câbler. Je vais donc créer deux fois un constructeur CT OR et Tab, pour dégénérer ce constructeur. Et je vais injecter mon objet de configuration d' icônes dans ce service afin que nous puissions accéder à ce fichier de configuration et à ses valeurs. Permettez-moi simplement de le renommer. Je vais également avoir une chaîne privée, disons const, pour le nom de notre table. Et je vais juste appeler les participants. Très bien, c'est ainsi que nous allons appeler la table dans notre rangement de table. Et nous avons la configuration. Maintenant j'ai besoin d'un client. Très bien, je vais donc créer une méthode, je vais en faire une méthode privée ici. agit donc d'une tâche privée qui va renvoyer un objet client de table. Ça va ? Et bien sûr, au fur et à mesure, vous ajoutez les instructions manquantes. Nous allons dire « demandez à un client de table ». Et ce client va d'abord définir un client, je vais juste appeler le client. Ce client sera égal à la nouvelle table. En fait, il s' agit d'un client de service. Excusez-moi, je le renomme en client de service. Il s'agit donc d'un nouveau client de service à table. Nous y voilà. Ensuite, nous allons transmettre cette valeur de configuration pour notre chaîne de connexion. Et juste au cas où tu ne te souviendrais pas de la clé, tu peux toujours revenir ici. Je ne me rappelle pas combien de temps il faut sauter par ici pour l'obtenir. Et c'est ce que nous allons utiliser pour la valeur de la clé de configuration. Très bien, maintenant que nous avons le client de service, nous allons économiser que notre client de table sera égal aux clients du service. Les points obtiennent la table, le client de la table via le nom de la table. Le nom de la table est la même valeur que celle que nous venons de stocker ici. Nous pouvons donc le faire. Ensuite, nous allons attendre ou inscrire les clients à créer s'il n'existe pas. Alors regardez cette valeur nulle. Si la table n'existe pas lorsque nous essayons de communiquer avec notre compte de stockage, nous avons la possibilité de simplement la créer si elle n'existe pas. Je peux donc simplement choisir ça. Et bien sûr, je vais choisir l'option asynchrone , puis nous pourrons renvoyer le client de table. Donc, si la table n'existe pas, elle va la créer et s'y connecter. Et puis notre client incarne désormais cet objet de connexion. Alors voyons ce que nous faisons. Obtenez le nom du participant par identifiant. Maintenant, nous allons devoir obtenir une instance client instable, puis nous allons continuer et obtenir Entity Sync ? Tu sais, ça ressemble à ça. Et bien sûr, si nous attendons , le méthyle doit être asynchrone. Le client de table var est donc égal à deux. Nous demanderions au client de la table de choisir la méthode que nous venons de créer. Et puis la deuxième ligne que vous remarquez contient une erreur. Il s'agit donc de synchroniser l'entité et toutes ces entités mettent l' identifiant et nous avons une erreur. Pourquoi y a-t-il une erreur ? Parce qu'il nécessite une clé de partition. Ça va ? Nous devons donc donner une clé de partition et une clé de ligne pour obtenir l'entité. L'entité participante n'a donc aucune valeur de clé de partition ici, n'est-ce pas ? Je veux dire, oui, nous avons le champ intégré pour une clé de partition, mais nous n'avons pas de champ dédié qui servira de clé de partition. Donc, dans le cadre d'une bonne conception, nous lui donnerions une autre propriété. Et veillons à ce que chaque participant à notre conférence soit professionnel d'un certain secteur, par exemple. Donc, ce que nous pouvons faire ici, c'est dire industrie, nous l'appellerons simplement le nom du secteur dans lequel vous évoluez, qu' il s'agisse de l'informatique, de l'éducation, etc. Et puis l'industrie peut être notre clé de partition pour séparer tous les participants selon le secteur d'activité. C'est logique, non ? Ainsi, lorsque vous développez votre application en fonction de vos objectifs, vous devez toujours vous assurer les meilleures décisions possibles pour votre secteur du design. Revenons donc à notre méthode et ce que je vais faire, c'est que nous devrions transmettre l'industrie des chaînes et l'identifiant de la chaîne. Ensuite, nous transmettrons l'industrie et la pièce d'identité pour aller chercher ce participant. Pour la méthode suivante, qui consiste à obtenir des participants. Nous commençons bien sûr par le client de table , puis nous allons créer des parties de code légèrement différentes ici. Je vais donc parler de table de pages. J'ai tendance à ce que l'objet d'entité appelé entités participantes soit égal à l'entité participante de la table Client point query. Ensuite, nous pouvons renvoyer la liste D2 des entités participantes, ce qui satisfera à ce type de retour. Passons maintenant à notre absurdité. Comme d'habitude, nous commençons par notre objet client à la pêche ou à table. Et si nous attendons, la méthode doit être un évier. Ensuite, nous allons simplement aller de l'avant et attendre nos clients de table. Laisse-moi réessayer. Alors oh, je suis désolée. C'est asynchrone. Attendez le client à table. Nous y voilà. Ne modifiez pas l'entité asynchrone. Nous allons simplement procéder et lui donner l'entité participante. Nous avons donc déjà vu le fonctionnement de Hold Upsert lorsque nous faisions Azure Cosmos, au cas où vous ne le connaîtriez pas si bien. Absurd est essentiellement un mot-valise ou une combinaison des mots mise à jour et insertion. Donc, si l'entité existe sur la base des informations fournies, en particulier avec la clé et la clé de partition, elle remplacera simplement les détails. S'il n'existe pas, le nouvel enregistrement sera créé. Très bien, donc tout cet upsert fonctionne pour ou supprime un participant. Bien sûr, nous le rendons asynchrone. Nous allons chercher notre client de table. Et nous allons juste attendre le client de table Dot Delete a sink. Et ce que je n'ai pas fait pour celui-ci, c'est fournir les paramètres que nous devons fournir pour supprimer l'async. Donc, pour supprimer async, nous devons transmettre les valeurs de la clé de partition et de la clé de ligne. Et ce sont les valeurs que nous transmettons lors de notre opération de suppression. Maintenant, si vous avez des doutes quant à ce que vous devez transmettre, vous pouvez toujours vous renseigner sur les maîtres des méthodes, ce qui vous aidera à vous faire une idée. Alors allez-y et transmettez les paramètres et cela devrait être delete entity a sink. Je m'excuse de ne pas supprimer l'async, mais de supprimer l'entité asynchrone. Async aurait pu supprimer la table. Très bien, la suppression de l'entité prendra ces deux paramètres. Nous avons maintenant créé notre service pour notre rangement de table. Nous avons apporté un léger ajustement à notre entité ici. Et bien sûr, nous devons mettre à jour notre contrat, qui est l'interface, car j'ai changé la signature de cette méthode. Je vais donc simplement passer là-bas et modifier la suppression pour prendre les deux paramètres comme prévu. Et pour qu'il attire des participants, nous devons également le mettre à jour avec cela. Ça va ? Donc, une fois le contrat satisfait, le service est satisfait. Et nous n'avons aucun conflit ni aucun record. Et puis, comme d'habitude, nous devons l'enregistrer. Je vais donc simplement passer à notre fichier program.cs et voir un point de construction. Laisse-moi réessayer. Services Builder Dots. Les points ajoutent un service étendu au service informatique stocké mis en œuvre par Table Storage Service. Et c'est tout. Ainsi, à notre retour, nous allons créer le contrôleur et les vues correspondantes qui nous permettront de faciliter le processus d'enregistrement. 11. Créer des contrôleurs et des vues: Créons maintenant notre manette. Nous allons directement accéder au dossier de nos contrôleurs , sélectionner le contrôleur, et nous allons simplement créer un contrôleur MVC avec des actions de lecture/écriture. Cliquez sur Ajouter, et appelons-le « l'exploit ». Ce contrôleur d'enregistrement des participants doit bien entendu être ajouté. Et voici la participante, sa thèse sur le contrôleur. Laissez-nous injecter notre service informatique. Donc I Table Storage, I Table Storage Service. Hein ? Et nous pouvons procéder à l'initialisation en tant que champ privé en lecture seule. Ça va ? Et maintenant, nous pouvons commencer à agir. Maintenant, d'une manière générale, vous souhaiterez utiliser modèles de vue pour gérer ce qui se passe à l'avant et à la différence du backend. Mais encore une fois, il s'agit d'une démonstration rapide, alors excusez le manque de bonnes pratiques et d' abstractions nous ne faisons qu'une simple démonstration pour montrer la connectivité. Ensuite, vous pourrez exposer toutes les meilleures pratiques et les différentes préoccupations concernant notre vue d' index La première chose à faire, bien entendu, est d'obtenir les données. Je tiens donc à dire que les données var sont égales à Underscore Table Storage Dot Get Participants. Maintenant, c'est un synchrone que je dois attendre. Et puis, bien sûr, convertissez également cette méthode en méthode asynchrone. Ensuite, je peux transmettre ces données à la vue. Maintenant, générons la vue. Cliquez donc avec le bouton droit sur le mot Affichage, puis cliquez sur Ajouter une vue. Et je vais juste aller à Razor View. Et je vais utiliser un modèle de liste. Et la classe modale sera une entité participante. Et je peux laisser tout le reste. Je n'ai pas besoin de référencer les bibliothèques de scripts , puis de cliquer sur Ajouter. Et en un rien de temps, notre vue d'index a été générée. Donc, à partir de là, je ne me donnerai pas la peine de modifier ce que nous examinons pour le moment. Ce que je vais modifier, c'est cette section où nous passons les clés primaires afin de pouvoir utiliser la touche de ligne de rôle. Et bien sûr, nous avons besoin de gros morceaux de fête, alors laissez-moi les nommer de manière appropriée. Nous avons donc besoin de l'identifiant et de la clé de partition, qui seront appelés industries. Je peux dire que l'industrie est égale à la virgule point de l'industrie et que l'identifiant est égal à rho KI. Très bien, c'est ce que nous allons devoir transmettre à notre édition, à nos coordonnées, à nos méthodes de suppression. Pourquoi ? Comme tous ces éléments nécessitent à la fois la clé de partition et la valeur de l'identifiant, comme nous devons récupérer pour pouvoir modifier, nous devons récupérer pour examiner les détails. Et bien sûr, pour la suppression, nous avons également besoin de ces données. C'est ainsi que nous allons établir l'indice. Passons maintenant à la suivante, qui concerne les détails. Et les détails suivraient une opération similaire. Mais n'oubliez pas qu'ici, nous prenons l'identifiant int et nous prenons la valeur industrielle de la chaîne. Et en fait, id est une chaîne parce que nous allons utiliser une grille. Et nous devons apporter quelques ajustements à cet égard. Cela doit donc être une tâche asynchrone. Bien sûr, j' aurais pu simplement utiliser l'IntelliSense pour le convertir. Permettez-moi donc de rendre la méthode asynchrone en fonction de cette saisie. Ensuite, nous n'attirons pas de participants, mais nous obtenons notre dix D, ce qui ne nous obligera pas à oublier la valeur industrielle et la valeur d'identification. Nous les transmettons donc nous renvoyons la vue avec les données. Ensuite, nous pouvons générer ces données, cette vue. Et nous allons détailler. Nous allons donc utiliser le modèle de détail par rapport la même entité et l'ajouter. À l'heure actuelle, notre vue détaillée est créée. Permettez-moi donc de fermer tout ce dont nous n'avons pas besoin pour le moment. Pour Create, nous pouvons laisser cela car nous n'avons pas besoin de données initiales ou de Louis. Examinons donc cela. Si nous voulons qu'ils apportent la valeur ajoutée à l'industrie, nous pourrions théoriquement leur proposer listes déroulantes qui ne sont pas théoriquement basées sur vos besoins. Vous pouvez leur fournir des listes déroulantes afin qu'ils puissent choisir parmi une liste sélectionnée de secteurs que vous aimeriez avoir comme clés de partition. Pour cette démo simple, nous allons simplement la taper. Mais bien sûr, à l'avenir, voudrez peut-être avoir une liste organisée que vous reconnaîtrez comme les valeurs clés de votre parti ou valeurs clés de partition potentielles, n'est-ce pas ? Laissons donc la vue Créer de côté. Eh bien, laissez-nous générer cette vue. Je vais donc simplement cliquer avec le bouton droit sur Ajouter une vue, Razor View. Ensuite, nous utiliserons nos modèles de création pour la même entité. Allez-y et ajoutez. Une fois que les créateurs ont été ajoutés, il est à noter que cela ne signifie pas asynchrone . Nous n'avions besoin de rien d' asynchrone pour la création, mais nous devrons faire des choses asynchrones dans la méthode post. Donc, dans la méthode post, nous devrions revenir sur le participant. Objet d'entité. Nous y voilà. Alors ce que nous allons faire, c'est essayer. Donc, avant même d' entrer dans le vif du sujet, avant même d'appeler le service, nous devons saisir certaines données. Donc, ici, je voulais dire que la clé de partition, clé de partition de l'entité participante sera égale à et alors c'est l'entité participante. Points. Sur quoi nous sommes-nous mis d'accord ? Je pense que c'était de l'industrie. C'est exact. Et puis je vais indiquer que c'est la clé de ligne, donc nous ajoutons la clé de ligne. Et voilà, ça va être égal à Boyd Dots, nouveau GUID. À la chaîne. Ces deux-là, nous pouvons appeler notre service de rangement de table point à bouleverser le participant et lui donner l'objet d'entité du participant. Parce que tous les autres champs auraient été définis en remplissant ce formulaire de création. J'ai une erreur ici car la conversion en async n'a pas été terminée. Alors allons-y et rencontrons-nous. C'est une tâche et cette erreur disparaît. Nous pouvons maintenant passer aux modifications. L'édition devra donc effectuer une extraction similaire aux détails. Nous pouvons donc simplement aller de l'avant et le faire. Et bien sûr, les paramètres doivent être similaires. Alors pourquoi sais-tu du texte alors que tu peux copier et coller ? Et ensuite, oh, nous avons besoin que ce soit asynchrone, alors convertissons cela. Ensuite, après l'opération, nous allons faire quelque chose de similaire à ce que nous avons fait lors de la création. Nous devons donc nous assurer réinitialiser une clé de partition et une clé de ligne. Et puis on passe à l'absurde. Très bien, vous verrez que les créations et modifications suivent essentiellement le même type de procédure, mais nous devons être un peu plus prudents avec l'OER. Je vais donc simplement modifier tous ces paramètres et ils seront appliqués et assurer que tout fonctionnera comme prévu. Une fois de plus, nous sommes en train de définir le secteur. Ce que sont les industries, c'est d'être la clé de partition. Est-ce que je veux quand même avoir une nouvelle clé de ligne ? Je ne voudrais pas avoir une nouvelle touche de ligne. Je vais donc supprimer celle-ci car la clé de ligne est déjà fournie avec cette entité et nous pouvons toujours la masquer sur le formulaire, n'est-ce pas ? Je veux donc régler à nouveau la touche de ligne, je vais juste réinitialiser la clé de partition au cas où cette valeur changerait lors de sa modification. Maintenant, je dois répondre que c'est, bien sûr, synchrone. Nous y voilà. Nous pouvons avancer. Passons maintenant à la suppression, je vais renoncer à la nécessité de l'enregistrement de suppression. Je vais juste supprimer la confirmation au moins pour le moment. Je vais donc supprimer la méthode getMethod , puis nous implémenterons la méthode post. Je l'ai déjà converti en méthode asynchrone, et j'ai inséré l'identifiant de chaîne et les paramètres industriels, un peu comme nous l'avions fait pour l'édition. Et ce que nous allons faire, c'est, j'attendrai, supprimer le participant une fois qu'il reçu le secteur d'activité et les valeurs d'identification. Dans l'index, nous allons donc refactoriser ce lien vers un véritable bouton de soumission de formulaire. Il suffit de placer le forum ici. Et ce que nous avons, c'est une simple balise de formulaire avec l'action ASB comme supprimer, qui activera la méthode de publication. Et puis nous avons deux entrées, toutes deux cachées. Et la valeur ici sera prise en compte. Et permettez-moi d'apporter cette correction. Donc, l'un devrait être Item Dot Roll Key et l'autre est Item Dot Industry, c'est de la valeur. Et puis les noms correspondent bien sûr aux noms des paramètres que nous avons décrits dans nos paramètres axonaux. Et puis nous avons une entrée qui est un bouton de soumission, qui ressemble à un bouton de danger. Je peux donc commenter ce lien car nous n'en avons pas besoin. C'est ainsi que nous allons gérer la suppression. Maintenant, j'ai encore une chose à souligner C'est un peu notre refactorisation. C'est une sorte de critique que j'ai Visual Studio et à la façon dont il réfracteur les méthodes lorsqu' il les utilise comme un évier. Mais en ajoutant ce mot clé asynchrone à la fin, je n'aime pas son sac à main. Également. Comme vous remarquerez que toutes ces méthodes sont asynchrones et que je n'ai pas dit get attendee async. Donc, si vous souhaitez conserver cette convention de dénomination avec vos méthodes, c'est très bien. Ce n'est pas quelque chose que je pratique nécessairement au-delà de mes préférences personnelles. J'ai remarqué que MVC ne gère pas bien navigation lorsque l'async est ajouté au nom de l'axone et de la vue. Soyez donc du bon côté. Ma suggestion est que s'il a été renommé en async, supprimez simplement cette dénomination asynchrone. C'en est une. Faites-le donc pour toutes les actions. Tu verras que je l'ai déjà fait. Et tous ceux qui étaient modifiables de manière asynchrone et indexaient de manière asynchrone et tout le reste. Il est renommé uniquement avec le nom d'origine, sans ajout d'une fonction asynchrone. C'est une question pour renommer les vues, n'est-ce pas ? Ainsi, toutes ces vues essaieront en fait d'accéder à la version asynchrone ou elles seront nommées asynchrones. Vous pouvez donc simplement supprimer ce mot clé asynchrone. Je suis juste en train de cliquer dessus et d'appuyer sur F2 sur mon clavier pour le renommer. Et l'action qui se trouve à l'intérieur de ceux qui sont des formulaires devrait simplement passer à Modifier, n'est-ce pas ? Il s'agit donc d'une refonte rapide que je suggère juste pour m'assurer que nous n'avons aucun problème. Je ne me suis jamais vraiment assis pour dire : « Laissez-moi essayer de faire en sorte que la convention de dénomination asynchrone fonctionne ». Je le préfère sans, donc c'est quelque chose que j'ai essayé d'éviter. C'est vrai. Et celui-ci a déjà été généré. Si vous vouliez avoir la page de confirmation, nous aurions pu conserver la vue générée en conséquence. C'est donc le formulaire que je viens d'utiliser sur l'index pour m'assurer que nous pouvons simplement procéder à la suppression du message. La dernière activité consiste à passer à notre mise en page et à modifier notre menu pour avoir la possibilité d'accéder au contrôleur d'enregistrement des participants, puis d'accéder à la vue d'index, puis vous pourrez lui donner un nom. J'ai donc simplement supprimé le lien de confidentialité et remplacé par le lien d'inscription des participants. Ainsi, à notre retour, nous pourrons procéder à des tests. 12. Table de test Stockage CRUD: Très bien, je suis en train d'exécuter l'application, juste au cas où vous vous demanderiez comment l'exécuter. Encore une fois, assurez-vous que le nouveau projet est votre projet de démarrage. Ensuite, vous pouvez simplement exécuter sans déboguer si vous souhaitez le déboguer. Et par tous les moyens, allez-y. Je cours donc sans déboguer et je vais simplement me lancer dans l'enregistrement des participants. Nous voyons donc que notre page d'index s' est chargée, nous n'avons eu aucune erreur. Cela signifie qu'il est connecté à notre stockage ou à nos cônes. La table n'a rien vu et elle est vide. C'est très bien. Laissez-nous en créer de nouveaux. Si je crée un nouvel enregistrement de test, disons des tests, tests et des tests sur ti.com et Industries IT, et bien entendu, je ne fournirai pas de clé de partition, de clé de ligne et d'horodatage pour les pièces de rechange nettoyage qui devraient être effectuées sur notre interface utilisateur. Mais c'est très bien. Appuyons sur Créer. Et nous voyons ici qu'il est revenu avec le disque. L'industrie et moi sommes donc en train de partitionner une clé les mêmes valeurs et nous avons obtenu une nouvelle clé « good for » ou « 0 » et une valeur d' horodatage. Si je vais dans les détails, on voit tout à ce sujet. Nous savons donc que la clé de partition fetch one by ID slash fonctionne. Si je vais dans Modifier, essayons de changer quelque chose ici. C'est donc le test 123, et je vais enregistrer, et cela a modifié ce fichier. Très bien. Maintenant, prenons note ou quelque chose comme ça. Si je passe à nouveau à Edit, je change de secteur cette fois pour passer à ITU one-two-three ou essayons quelque chose de véritable éducatif, n'est-ce pas ? Ce n'était donc pas le cas, c'était de l'éducation. Ensuite, j'ai essayé de sauvegarder des nœuds pour obtenir un enregistrement entièrement nouveau. C'est la même clé de règle, mais avec une clé de partition différente. Vous devez donc faire très attention à cela. Parce que nous avons spécifié que le stockage des tables utilise une clé composite. Il examine à la fois la clé de partition et la clé de ligne. À part cela, Deshawn peut avoir plusieurs enregistrements avec la même valeur de clé rurale, désolé, nous pouvons avoir plusieurs partitions avec les enregistrements avec la même valeur de clé rurale. Et c'est ce que nous voyons ici. Il s'agit d'une partition différente et nous obtenons la valeur de la clé de ligne ici, n'est-ce pas ? Il s'est donc simplement poursuivi et a créé un tout nouveau record. C'est donc une chose à laquelle vous devez faire très attention lorsque gérez la valeur de cette clé de partition. C'est pourquoi vous pourriez probablement utiliser la touche de ligne comme touche des deux parties, touche Sean Andrew, pour vous assurer qu'il s'agit toujours du même enregistrement. Maintenant, je vais procéder à la suppression, et je ne vais pas me donner la peine de corriger l'esthétique ou quoi que ce soit d'autre. C'est juste pour faire une démonstration de l'intégration au Cloud, pas nécessairement pour répondre à un souci de style, n'est-ce pas ? Je vais donc simplement tester la suppression et la suppression de l' un de ces enregistrements. Et nous y voilà. La suppression a fonctionné. Nous venons donc de valider que notre équipe de rangement de table fonctionne. Sachez que ce que vous pouvez faire pour y réfléchir plus avant maintenant, c'est de nettoyer éléments tels que les formulaires de création et de modification, afin de ne pas avoir afficher l' horodatage, la touche de ligne et la clé de partition. Nous pouvons les supprimer de la création, et nous pouvons les supprimer de notre horodatage. Alors allons-y et nettoyons ça. Ensuite, pour notre liste d'index, nous n'avons probablement pas besoin de voir ces éléments non plus. Je n'ai donc pas besoin de voir la clé de partition, ligne, la clé, probablement la ligne Keegan, restez. Mais comme c'est plutôt une idée, je voudrais probablement la placer au premier plan. Et même dans ce cas, voulez-vous vraiment voir cette grille ? Maintenant ? Supprimons cela également. Aucun de ces trois éléments n'existe donc ici non plus. Nous le gardons donc propre et beau. Et là, nous venons implémenter le crédit pour Table Storage. Voyons maintenant que nos exigences ont évolué. Et non, nous devons ajouter une forme de téléchargement de fichier à ce formulaire, car les participants doivent télécharger un avatar ou une image que nous devrons stocker en toute sécurité, puis récupérer pour l'afficher. Nous allons maintenant voir comment tirer parti Blob storage.com ou quelque chose comme ça. 13. Ajouter le service de téléchargement Blob: Très bien, nos exigences ont donc changé. Je sais que nous devons stocker une image téléchargée pour l'utilisateur, mais nous ne voulons pas la stocker sur nos serveurs pour plusieurs raisons. Nous allons donc déléguer cette responsabilité à un Azure Blob Storage. Je vais donc ajouter un nouveau champ à cette entité de table et l'appeler des noms d'images. Nous allons donc le renommer pour qu'il ait la même valeur que la clé de ligne. Et il enregistrera simplement le nom de cette image ici. Ensuite, cela servira de point de référence à l' avenir chaque fois que nous aurons besoin de référencer le blob. Créons maintenant un nouveau service, et je l'ai déjà fait. Nous allons l'appeler Blob Storage Service. Il suffit donc de cliquer avec le bouton droit sur les services, ajouter une nouvelle classe et nous appellerons un service de stockage Blob. Et dans mon service Blob Storage, j'ai écrit des notes, une partie du code est déjà fournie par quelqu'un pour vous expliquer, afin que vous n' ayez pas à me regarder taper. Maintenant, ce que j'ai fait, c'est d'abord créer un constructeur dans lequel j'ai injecté la configuration. Vous pouvez donc y aller et le faire. J'ai également un champ appelé nom du conteneur , que j'appelle images des participants. Maintenant, la raison pour laquelle j' utilise toutes les minuscules est que j'ai fait allusion aux conventions de dénomination plus tôt. Avec Blob of storage, vous ne pouvez pas utiliser de majuscules dans votre genou. Donc, tout ce que vous nommez, vous devez le nommer en minuscules, vous pouvez utiliser des caractères spéciaux. Note de bas de page, je garde juste toutes les images des participants en minuscules. Ensuite, j'ai mon méthyle, ce qui va créer un conteneur pour les clients. Maintenant, vous pouvez l'emballer dans ce camion afin de détecter toute exception, en particulier en ce qui toute exception, en particulier en concerne la dénomination, car ce que nous faisons ici, c'est essayer de créer un conteneur, un client de conteneur Blob pour être précis, et transmettre cette chaîne de connexion provenant de configuration et ce nom de conteneur. Maintenant, si votre nom ne correspond pas, vous vous retrouverez certainement avec une exception. Vous pouvez donc simplement le faire, essayer de capturer et placer un point d'arrêt ici, juste pour voir quelle est l'exception Vous obtiendrez probablement une erreur 400 à ce moment-là. Non, nous allons aller de l'avant et voir qu'aucun poids créatif n'existe. Donc, lorsqu'il essaie de le faire, il obtient l'exception. Et ensuite, si c'est aussi loin, nous voulons rendre le conteneur. C'est donc la première méthode de notre nouveau service. Maintenant, la prochaine chose que nous voulons faire est de télécharger un blob. Nous allons donc avoir une méthode appelée upload blob. Ce sera une tâche asynchrone qui renverra une chaîne et qui prendra le fichier iPhone comme type de paramètre. Ainsi, lorsque nous téléchargeons en utilisant MVC ou Dotnet Core, en général, le fichier I form est le type de données qui reçoit ce fichier téléchargé. Ensuite, nous allons transmettre le nom d'une image. La première chose que je fais est de déterminer quel sera le nom du Blob. Et le nom de l'image ici représente le nom pour lequel je veux stocker un fichier comme raison. C'est une bonne idée de renommer votre fichier avant de le télécharger car si plusieurs utilisateurs essaient de télécharger des fichiers portant le même nom, vous risquez de vous retrouver avec une collision. Il est donc préférable de le renommer en un nom propre à l'enregistrement. Ensuite, nous pouvons commencer et établir les noms de ces blobs. Je prends donc la valeur du nom de l'image, je peux passer une valeur unique. Ensuite, j'ajoute ce nom au chemin d'origine du fichier qui a été chargé. Ainsi, le chemin qui obtient le point du fichier d' extension Filename examinera le nom complet du fichier, obtiendra le point, JPEG, PNG, quel qu'il soit, puis nous l'ajouterons à notre nom unique. Nous arrivons à notre pays et à notre client. Ensuite, je vais créer un objet de flux de mémoire dans lequel je vais copier du fichier de formulaire vers le flux de mémoire, remettre la position à zéro, puis nous allons utiliser le client, télécharger le blob avec le nom du blob depuis le flux de mémoire. Ça va ? Et cette valeur par défaut représente un jeton d'annulation. Tu pourrais vraiment t'en passer. Donc, comme nous n' utilisons pas de jetons d'annulation, vous devez les supprimer. Ensuite, je vais renvoyer le nom du Blob. Maintenant, le client lui-même est en fait un client, il y aura en fait un type de blob de réponse, d'informations sur le contenu. Ainsi, à partir de cet objet, vous pouvez réellement regarder la valeur et voir différentes informations sur un blob qui vient d'être téléchargé. Si vous avez besoin de plus d'informations que le nom du Blob, n'hésitez pas à les utiliser. Nous pourrions également utiliser le client conteneur pour obtenir plus d'informations par la suite. Mais pour l'instant, je voulais juste enregistrer le nom du fichier. Maintenant que nous avons téléchargé notre fichier, voyons comment récupérer ou blob. Maintenant, la récupération du blob va être une situation particulière car ce qui se passe, c'est que lorsque nous configurons le conteneur Blob, il sera privé par défaut . Et nous avons déjà établi que nous utilisons des URL pour accéder aux différents blobs une fois qu'ils sont téléchargés Nous examinerons plus en détail les URL plus tard. Mais le fait est que s'il est privé, vous ne pouvez pas simplement y accéder. Et vous ne voulez pas simplement le rendre public parce que vous ne voudrez peut-être jamais trouver quelqu'un qui puisse y accéder. Ainsi, lors de la récupération de nos blobs, nous devons générer ce que nous appelons des jetons SAS. Il s'agit de jetons de signature à accès partagé et nous allons examiner cela dans cette méthode. Notre nouvelle méthode est donc get blob URL, qui va renvoyer une chaîne. Il s'agit donc d'une tâche asynchrone qui renvoie une chaîne. Et encore une fois, il prend le nom de l'image. Nous initialisons donc un client conteneur, puis nous initialisons également un client Blob par rapport à ce nom d'image. Nous avons maintenant ce que nous appelons le blob builder. Et c'est le générateur utilisé pour générer le jeton de signature d'accès partagé auquel je viens de faire allusion. Donc, ce que nous allons faire ici, c'est blob SAS Builder est égal à un nouvel objet, qui va prendre le nom du conteneur nous voulons accéder, le nom du Blob auquel nous voulons accéder. Ensuite, nous allons définir l' expiration de cette boîte à outils, ce qui signifie qu'une fois ce délai écoulé, je vais juste le régler sur qui signifie qu'une fois ce délai écoulé, 2 minutes. Ça va ? Mais une fois ce délai écoulé , personne ne devrait plus pouvoir accéder ou utiliser ce lien pour accéder à la ressource. J'étais assis dans le protocole qui devait être HTTPS et la ressource B. Si vous passez la souris sur la ressource, vous verrez que B est spécifique à blob. S'il s'agit d'un type différent, vous pouvez le voir, vous pouvez voir son dit C pour conteneur et vous avez différentes options. Mais pour l'instant, nous ne faisons que Blob Storage. Nous définissons donc B comme type de ressource. Ensuite, je vais définir l'autorisation de lecture du blob SAS Builder. Donc, dans cette énumération, vous devrez peut-être inclure une référence d' utilisation manquante pour cette énumération. Mais nous avons plusieurs options ici. Vous pouvez générer un jeton SAS qui permet de supprimer, de publier, etc., ce sont toutes des autorisations. le moment, nous voulons simplement lire parce que nous voulons pouvoir regarder l'image lorsque nous la récupérons. Ensuite, nous allons renvoyer blob point pour générer un jeton SAS avec les options du générateur à ne pas créer de chaîne. Cela va donc se déclencher, générer ce jeton SAS nous donner également l'URL complète. Ensuite, il nous renverra cette URL complète. Sachez que lorsque nous passons à autre chose, nous voulons supprimer ce blob chaque fois que l' enregistrement est supprimé. Nous allons donc avoir une autre méthode qui va supprimer le blob. La tâche publique AsyncTask a donc supprimé le blob et nous reprenons le nom de cette image, en nous connectant au conteneur créant un client blob. Et puis je vais juste dire, je vais attendre, supprimer un blob point, s'il existe, un évier. C'est juste pour se sentir en sécurité. Il existe une suppression asynchrone, mais une suppression s'il existe. Si c'est le cas, si cela n'existe pas, alors il n'y a pas d'erreur, alors nous pouvons supprimer tous les instantanés. N'oubliez donc pas qu'avec le stockage Blob, nous disposons système de gestion des versions et qu'à chaque fois qu'il peut y avoir une collision, cela peut créer une nouvelle version et conserver cet historique. Nous pouvons choisir de tout supprimer une fois le blob supprimé. C'est donc tout pour le coordinateur de notre service de stockage Blob. Je vais juste procéder à l'extraction de cette interface. Une fois cette interface extraite, nous passons à notre fichier program.cs et enregistrons ce service de la même manière que nous l'avons fait pour le service de stockage de tables. Non, nous pouvons refactoriser nos contrôleurs et nos vues. Commençons par nos manettes ou manettes. Je vais injecter le service de stockage Eye Blob et l'initialiser. Nous savons déjà comment procéder. Ensuite, pour l'action d'indexation, je vais ajouter ceci pour chaque boucle, quelqu'un à dire pour chaque élément en détail. Parce que n'oubliez pas que cela renvoie la liste des participants. Je vais vous dire de trouver le nom de l'image. Donc, j'essaie que le nom de l'image soit égal au service de stockage Blob qui obtient l'URL du blob, nom de l'image point de l' élément. Pourquoi remplacons-nous cette valeur ? Eh bien, je ne vais pas stocker l'URL complète, je vais juste stocker le nom, n'est-ce pas ? Il s'agit donc d'une extension de nom unique. Je vais donc transmettre ce nom, que portera le blob. Ensuite, je vais obtenir l'URL SAS complète, que je vais ensuite remplacer par pour revenir à la vue pour l'affichage. Bien entendu, dans un environnement plus clair, nous aurions créé cette abstraction et des modèles de vue de Singapour afin de mieux analyser les données, etc. Mais en renonçant à toutes ces meilleures pratiques, voici un exemple clair de la façon dont nous pouvons voici un exemple clair de la façon dont nous pouvons simplement obtenir l' URL de ces pulsations en papier. Ensuite, nous avons les détails. Donc, pour les détails, faites quelque chose de similaire. Nous avons le record ici. Ensuite, je vais juste voir qu'un nom d'image à points record est égal à celui du sang. Vous n'êtes encore une fois pas de méthode de création de format. J'ai ajouté un nouveau paramètre et il s' agit du paramètre de fichier I-Form. Ce fichier I-Form capturera donc le téléchargement du fichier à partir du formulaire que nous allons modifier et quelques autres. J'en ai également refactorisé le code. J'ai donc commencé par définir un identifiant pour une nouvelle grille. Ensuite, je saisis la touche Row pour être cet identifiant. Maintenant, mon nom unique pour nommer mes fichiers blob sera l'ID. Il n'est pas nécessaire que ce soit l'identifiant. L'identifiant sera unique à chaque fois. Je pense que c'est un moyen simple d' examiner Blob Storage et identifier ce qui s'y trouve chaque fois que j'en ai besoin. Je suis donc en train de voir si la longueur en points du fichier de formulaire, ce qui signifie que quelque chose a été téléchargé , est supérieure à zéro, alors je vais définir le nom de cette image pour qu' il soit égal à ce que cela renverra. Souvenez-vous donc que notre blob de téléchargement, si je passe à l'implémentation en collant celui-ci et le nom de l'image, ce sera l'identifiant. Nous allons procéder à l' ajustement, puis le télécharger. Et puis je retourne simplement le résultat de la concaténation de l' identifiant et de l'extension. C'est donc ce que nous allons obtenir comme nom d'image. Et puis si rien n' a été téléchargé, nous pouvons le configurer comme une image par défaut. Très bien, puis nous allons de l'avant et absurditons le participant. Passons à notre édition et à notre édition. Nous faisons simplement la même chose si check, où si le fichier du formulaire est supérieur à zéro, nous téléchargeons notre blob. Je transmets la valeur clé de cette ligne et le fichier de formulaire que nous avons également ajouté en tant que paramètre. Maintenant, une chose dans la vue que je ne pense pas avoir soulignée si je passe à la vue ici, assure que nous nous souvenons que nous avons supprimé les valeurs d'entrée pour la clé de ligne, clé de partition et l'horodatage. Mais pour conserver la clé de ligne d'origine pour l'enregistrement, assurez-vous que vous avez masqué cet ASP pour Row Key dans le formulaire. Très bien, donc c'est Edit. Et puis enfin, nous passons à la suppression. Supprimer est un peu difficile maintenant, car nous avons besoin du nom de l'image d'origine pour supprimer le blob. Donc, ce que j'ai dû faire, c'était Fitch, le participant en premier. Ensuite, nous pouvons supprimer cela, puis supprimer le blob en contournant ces données, ce nom d'image, car nous l'avons d'abord récupéré, nous l'avons en mémoire. Nous pouvons les supprimer de la table de stockage, puis utiliser ce que nous avons stocké en mémoire, puis les emballer avec ces données pour les supprimer. Enfin, examinons différentes modifications que nous avons apportées aux points de vue. Donc, pour la vue de création, j'ai ajouté une nouvelle section qui nous permettra de télécharger l'avatar. Je viens donc de créer un nouveau groupe de formulaires. Nous avons l'étiquette ici et je viens de taper « uploader » notre tar. Ensuite, le type d'entrée est file, et le nom ici est un fichier formé de telle sorte qu'il corresponde au paramètre que nous recherchons dans le post. Et c'est tout pour notre Create. Et mes compétences en matière de copier-coller sont devenues incontrôlables. Permettez-moi donc de supprimer ces éléments de validation. Et j'ai besoin du même contrôle dans le montage. Je vais donc simplement ajouter ce groupe de au formulaire d'édition. Donc, si rien n'est téléchargé, c'est très bien car nous conservons le même blob et tout va bien. Cependant, si quelque chose est téléchargé, nous le téléchargeons et il effectuera le remplacement en conséquence. Maintenant, dans la vue détaillée, j'ai ajouté une autre combinaison DT DD à cette liste de données. Donc, voici Avatar et maintenant j'ai cette balise d'image, qui suppose qu'elle provient du nom de l'image à points du modèle. Et je suis juste assis sur une largeur de 150 et une hauteur de 150. Ensuite, dans l'index, j'ai ajouté un autre en-tête de tableau. Et si vous voulez l'étiqueter, vous pouvez dire avatar ou afficher une image, peu importe ce que c'est. Et puis dans le TR pour les données, j'ai ajouté un nouveau td, qui est une balise d'image similaire. La source sera le nom de l'image par points de l'élément, la largeur sera de 50 et la hauteur de 50. Ça va ? avons également remanié la forme des bits pour placer les liens HTML à l'intérieur du forum afin qu'ils s' affichent de gauche à droite au lieu de l' affichage aléatoire que nous avions auparavant. Je sais que j'ai dit que nous n'avions pas besoin de le réparer, mais je suis désolée, je n'ai pas pu continuer à le réparer. J'ai donc simplement placé ces deux liens dans le formulaire juste à côté du bouton Supprimer la soumission. Et j'ai ajouté les nouveaux attributs HTML pour la classe, avertissement BTN pour les modifications et btn-primary pour les détails. Donc, avec toutes ces modifications apportées, je vais simplement tout enregistrer. Et à notre retour, nous ferons nos tests. 14. Caractéristiques du service Blob: Un ajustement rapide avant de passer aux tests. N'oubliez pas que chaque fois que nous souhaitons faciliter le téléchargement de formulaires ou de fichiers dans un formulaire, nous devons inclure cet attribut dans le formulaire. J'ai donc oublié de le souligner dans la leçon précédente : nous sommes en train de moderniser ou de visualiser. Le type d'encre est donc égal aux données d'un formulaire à barres obliques en plusieurs parties. Assurez-vous donc que cela est présent dans le formulaire de création, ainsi que dans notre formulaire d'édition. Je vais également ajouter ce champ masqué au formulaire d'édition pour m' assurer que nous pouvons conserver la valeur du nom de l'image. N'oubliez donc pas que nous devons conserver le nom de l'image d'origine. Et si l'utilisateur télécharge une nouvelle image, nous modifierons l'ancienne. Mais nous devons conserver les noms d'origine des images afin de ne pas perdre cette valeur lorsque nous effectuons une modification. Passons maintenant à notre modification. Après l'action et je viens de passer aux ajustements nécessaires ici. Premièrement, je voudrais déplacer cette déclaration if vers haut, car nous l' avons rendue absurde avant même d'avoir essayé de vérifier si nous devions mettre à jour le fichier. Et nous devrions également mettre à jour le champ d'image. Vous avez mentionné le champ nominatif, n'est-ce pas ? Nous avons donc négligé cette partie de notre propre initiative, mais nous pouvons la corriger maintenant. Nous devons donc vérifier si la longueur du fichier du formulaire est supérieure à zéro. Et tous les éléments de ce fichier de formulaire peuvent également être nuls. Je vais donc faire en sorte que ce ne soit pas un coffre-fort. Mets ce point d'interrogation ici. Donc, si le fichier de formulaire a une valeur, nous vérifions la longueur si elle est supérieure à zéro. Et bien sûr, nous pourrions aussi simplement vérifier si ce n'est pas égal à zéro, car évidemment, cela aurait une longueur, mais quelle que soit la vérification avec laquelle vous vous sentez le plus à l'aise, nous allons de l'avant et disons : faites le nom de l'image soit égal à celui qui a été téléchargé. Si nous téléchargeons quelque chose, nous supposerons que nous sommes nouveaux, nous devons mettre à jour le nom de cette image. Ensuite, nous pouvons aller de l'avant et nous bouleverser. À présent, nous allons tester notre site de données, en supprimant tous les enregistrements existants, car je testais tout et je n'ai pas créé autre enregistrement pour effectuer ce test. Ainsi, si vous souhaitez supprimer tous vos enregistrements de stockage de table existants, vous pouvez toujours revenir à votre navigateur de stockage ou utiliser l'explorateur de stockage que vous avez peut-être téléchargé. Descendez dans les tableaux et vous verrez le tableau que nous avions créé précédemment , puis vous pouvez supprimer l'enregistrement que vous souhaitez supprimer. Maintenant, quand je cours, lance cette application et navigue pour assister à l' inscription et nous voyons notre tableau. Permettez-moi de créer un nouvel enregistrement et je vais télécharger un avatar. Et je vais choisir une image ici et lui donner son prénom, son nom de famille, son adresse e-mail, son secteur d'activité et créer. Et nous y voilà. Alors maintenant, je vois une image affichée ici dans Avatar. Regarde ça. Et je vois toutes les données qui ont été utilisées pour savoir ce qu'est cette image. Si je clique sur Détails, j'obtiens un lien brisé. Il est donc clair que nous devons travailler ici. Et ce que je vais faire, c'est inspecter l'élément. Et nous y voilà. C'est là l'erreur. Hé, il s'agit en fait d'imprimer les mots, de modéliser cette image. Passons donc par-dessus et corrigeons cela là où cela devrait réellement se trouver au niveau du panneau. Et cela ne devrait pas être un petit modèle, mais un grand modèle en forme de M pour représenter les données. Alors laissez-moi y remédier et le réexécuter. Et lorsque je recharge cet enregistrement ici, l'image s' affiche-t-elle correctement ? Non, mon Inspect Element est toujours ouvert. Et si vous regardez cette URL, vous verrez qu'il s'agit de l'URL du blob réel. Passons donc en revue ce que toute cette histoire d'URL est un verrou. Si je reviens sur le portail et que je l'actualise, nous verrons que notre enregistrement et/ou notre enregistrement ont un nom d'image. Il s'agit bien entendu de la même valeur d'extension de point que la touche de ligne. C'est très bien. Une fois de plus, nous l'avons renommé afin que chaque téléchargement soit unique. Maintenant, si je passe aux conteneurs blob, la première chose à faire est que vous verrez que images des participants ont été créées et qu'elles sont créées en tant que blob ou conteneur privé, n'est-ce pas ? Si j'entre, que je regarde les images, chaque bloc de blocs qui se trouve à l'intérieur de ce conteneur sera également privé. Je peux donc aller ici et copier l'URL. Si j'essaie d'accéder à cette URL, je reçois ce message indiquant que la ressource spécifiée n'existe pas. Nous savons maintenant que ce n'est pas vrai, car voici l'URL du stockage Blob , puis le conteneur, puis le nom du fichier et nous l'avons simplement copié pour savoir que le fichier existe. Ainsi, comme il est défini sur privé dans le niveau d'accès, nous ne pouvons pas y accéder directement via l'URL. Une fois de plus, en fonction du niveau d'accès, nous pouvons activer ou restreindre l'accès en gros à tous les blobs de notre conteneur. Maintenant, celui-ci est privé. C'est pourquoi nous générons cette URL SAS. Et puis, lorsque je clique sur générer SAS, vous voyez que nous pouvons maintenant configurer tous ces paramètres, puis générer le jeton SAS et l'URL. Et puis, une fois que Tolkien et cette URL ont été générés, si je les copie et essaie à nouveau d'y accéder dans le navigateur. Eh bien, mon navigateur est en train de télécharger le fichier. Très bien, c'est ce qui se passera si je l'utilise Si vous utilisez un certain navigateur, dans d'autres navigateurs, le fichier s'ouvrira. Mais regardons l'URL pour la coller un peu dans Notepad Plus, Plus, afin de pouvoir l' inspecter un peu plus. Non, nous repartons avec les mêmes pièces, le stockage des cônes, le contenant, puis le nom du fichier. Ensuite, vous remarquerez que vous avez une chaîne de requête. Nous avons donc Sb, c' est l'autorisation, c'est tout pour notre Windows. Ça commence. D'accord. C'est le moment. Quand est-ce que ça se termine ? C'est le moment. Quel est le protocole ? Https, puis nous avons d'autres paramètres. Le type est blob et la signature est cette chaîne dégénérée aléatoire. Et SV y représente une version signée, n'est-ce pas ? Vous ne le définiriez pas, cela sera défini lors de la génération de la signature. est ce que ce jeton SAS apporte à la table où nous obtenons cette URL spéciale qui permet d'accéder pendant autant de temps que nous sommes assis entre l'heure de début et l'heure de fin. Et vous voyez ici, c' était prévu pour une journée. Cela utilisait simplement les options par défaut. Mais bien sûr, nous pouvons définir une durée spécifique à l'objectif pour lequel nous avons besoin de ce jeton. Maintenant que vous avez un aperçu de ce qui se passe dans les coulisses lorsque nous recevons cette URL. Passons à Modifier. Et lorsque nous éditerons avec fetch the record, laissez-moi essayer de modifier ce fichier. Et après avoir cliqué sur Enregistrer, j'ai rencontré une erreur. Alors, bien sûr, je veux vous montrer l'IRS , puis nous y travaillerons ensemble. Donc, l'erreur qui a été détectée après avoir essayé de télécharger le blob était que le blob spécifié existe déjà. Ça va ? Bien entendu, nous ne pouvons pas télécharger un blob qui porte déjà ce nom. Donc, ce que je vais faire, c'est supprimer le blob s' il existe déjà, et ensuite nous pouvons continuer à le créer. Donc, pour le blob de téléchargement, nous allons passer au blob de téléchargement et nous allons modifier ce qui se passe dans cette méthode. Dans l'état actuel des choses, nous allons simplement accéder au conteneur et essayer de le télécharger. Et si vous passez la souris dessus, vous verrez où il est indiqué que cela crée un nouveau blob, ce qui signifie qu'il renverra évidemment une exception, comme vous l'avez vu, lorsque le blob existe déjà. C'est pourquoi la lecture de la documentation est très importante pour moi. Pour remplacer un blob existant, procurez-vous un client blob, puis téléchargez-le. Très bien, nous allons suivre les instructions pour réutiliser cette ligne sur laquelle nous avons obtenu ce client blob et remplacer cette ligne de téléchargement d'origine par une nouvelle qui indique un téléchargement asynchrone par des points blob humides. Et puis je transmets, j'utilise des paramètres nommés, donc sachez exactement ce que nous transmettons, où le contenu sera le flux de mémoire. Ensuite, nous allons remplacer « vrai ». Ainsi, en définissant override sur true, il remplacera tous les blobs existants. Et sans le paramétrer, ce serait faux. Il finit donc par avoir la même exception que celle que nous avons obtenue si nous négligeons de saisir ce paramètre de remplacement. Maintenant, il y a une autre tournure. Et c'est ce qui se passerait si je téléchargeais initialement un fichier J, puis que je le changeais en PNG. À ce stade, même si la valeur de l'identifiant le nom de l'image sont les mêmes, nous allons nous retrouver avec deux fichiers différents. Et avons-nous vraiment besoin de stocker d'anciens fichiers, n'est-ce pas ? Donc, techniquement parlant, vous pouvez également exécuter une suppression avant de procéder au chargement, juste pour vous assurer de ne pas vous retrouver avec deux versions différentes de ce qui devrait être l'avatar d'une personne. Vous pouvez donc également en tenir compte. Donc, pour répondre à ce qui s'est produit lors de l'action d'édition, je vais envoyer le nom de l'image d'origine tant que paramètre à notre méthode blob de téléchargement, ce qui signifie que nous allons maintenant devoir introduire un nouveau paramètre. Notre nouveau paramètre sera donc une chaîne, qui n'est pas un nom de Blob original audible. Et je suis en train de l'initialiser pour ne pas le faire. Et bien sûr, si nous mettons à jour l'interface, nous devons également mettre à jour l'implémentation. Et nous avons le même paramètre listé ici. Maintenant que nous avons cette valeur de nom Blob d'origine, je vais vérifier si elle existe. Donc, je vais dire que si la chaîne point n'est pas nulle ou vide et que vous transmettez cette valeur, alors nous voulons attendre, supprimer le blob et lui donner le nom de Blob d'origine. Nous allons supprimer le blob existant , puis nous pourrons procéder au téléchargement. Vous voyez donc qu'il existe de nombreuses dynamiques à distinguer dans notre cas, car nous pouvons nous retrouver avec des fichiers et des extensions différents et nous ne pouvons pas garantir que cela remplacera toujours celui existant. Il est plus sûr pour nous de supprimer l' ancien puis d' ajouter le nouveau. Alors que dans une situation où le nom du fichier sera peut-être toujours cohérent de toute façon, vous n'aurez probablement pas à passer par tout cela. Mais encore une fois, des options. Maintenant que nous avons effectué ces ajustements, allons-y et testons nos modifications. Encore une fois. J'ai chargé le formulaire, j'ai déjà choisi mon autre fichier, puis je verrai. Et nous y voilà. Maintenant, j' ai un tout nouvel avatar. J'ai modifié avec succès le téléchargement ou l'image Blob associée à cet enregistrement. C'est donc simple et agréable. Bien sûr, il y avait quelques nuances. Connaissez l' exemple que j'ai donné où l'extension de fichier peut être différente et nous nous retrouverons avec plusieurs fichiers pour le même enregistrement que celui qui m'est réellement arrivé. Voici donc une version avec JPEG et une autre version avec PNG, l'origine des fichiers PNG, le nouveau fichier était JP, et au lieu de le remplacer, j'ai juste créé un nouveau fichier, je dois le déréférencer. C'est pourquoi vous souhaiterez peut-être les supprimer avant de les télécharger afin de ne pas vous retrouver avec plusieurs fichiers potentiels. Même celui-ci a été téléchargé sans extension plus tôt. Ce sont de petites choses auxquelles vous devez faire attention lorsque vous manipulez des blobs. Enfin, je vais tester cette suppression. Supprimons donc cet enregistrement et nous saurons que le stockage de la table exigeait sa suppression. Revenons ici et au moins un de ces fichiers devrait disparaître. OK, deux d'entre eux sont partis parce que j'ai retiré l'original. Ensuite, j'ai également retiré celui qui était joint au dossier. Celui-ci n'était attaché à rien , je peux donc le supprimer manuellement. C'est très bien. Mais au moins maintenant, nous savons que nous sommes écrire avec succès dans notre mémoire blob, lisant à partir de notre mémoire blob à l'aide d'un essai, d'une tige. Et cela nous donne un accès limité juste pour cette période. Et nous sommes en mesure d'en supprimer et d'en télécharger un nouveau, modifier les associations de fichiers et tout le reste. Maintenant, à notre retour, nous allons implémenter notre service de file d'attente. Et les scénarios qui nécessitent un participant ont été enregistrés. Nous voulons envoyer un e-mail, mais nous ne voulons pas nous connecter directement au service de messagerie. Nous voulons plutôt l'ajouter à une file d'attente afin qu'il puisse être consommé ultérieurement , sans être traité. 15. Ajouter un service en attente: Nous allons donc maintenant implémenter nos mécanismes de file d'attente. La première chose que je vais faire est donc de créer un nouveau modèle. Je modélise un ensemble de données parce que ce n'est pas quelque chose que nous allons stocker. Mais je veux un cours pour que nous puissions avoir un message bien typé en conséquence. Je vais donc appeler ce message électronique. Et le message électronique aura trois propriétés. La première sera donc une chaîne, qui est l'adresse e-mail. Ensuite, nous aurons des horodatages. Je vais donc juste dire date, heure appelée horodatage. Et la dernière chose, c'est le véritable message. C'est donc une bonne chose pour le moment. Et puis, comme d'habitude, nous allons devoir nous tourner vers un nouveau service. Allons-y et ajoutons un autre cluster ou dossier de services. Cette fois, nous allons appeler cela un service. Et notre service de file d'attente aura un constructeur qui sera injecté ou notre configuration sera similaire à celle des autres services Nous aurons également un nom de file d'attente défini, que j'appellerai e-mails des participants. Maintenant, je vais juste avoir un public qui est une tâche d'une tâche publique appelée envoyer un message. Et envoyer un message va prendre l'objet du message électronique. Donc, message électronique, et je vais simplement appeler cela un e-mail. Et le truc, c'est que je suis en train de coder en dur dans cette file d'attente. Mais vous voudrez peut-être aussi garder ce type de flexibilité face aux autres indices avec lesquels vous pourriez avoir besoin d'interagir. Donc, ce que vous pourriez faire pour ce service de file d'attente c'est qu'au lieu de définir ce nom de file d'attente, vous pouvez simplement dire nom de la chaîne en tant que paramètre ici. Ainsi, vous pouvez réellement définir le nom de la file d'attente lorsque vous passez le message de votre choix. Mais alors c'est une question spécifique. Je vais donc simplement faire tout ce qui est spécifique à notre opération de messagerie électronique. Maintenant, je vais initialiser un client de file d'attente et je ne vais pas me donner la peine créer une méthode complète pour cela cette fois, car nous n'avons qu'un seul message, une méthode qui est envoyée. J'ai donc dit que le client var acute est égal à un nouveau client de file d'attente où nous avons besoin de la chaîne de connexion. Nous l'obtenons à partir de la configuration. Nous obtenons le nom de la file d'attente en fonction de cette valeur. Ensuite, nous avons défini les options du client de file d'attente pour qu'elles encodent les messages au 64. N'oubliez donc pas que nous remettons cela à plus tard, que nous l'activons et que nous l'éteignons. Lorsque nous créons la file d'attente elle-même. Ensuite, comme d'habitude, nous allons voir un client Q ou un client en file d'attente créer, sinon, existe, un récepteur. Nous allons donc nous assurer qu'il existe avant d'essayer d'envoyer un message. Pour envoyer un message, nous pouvons tout simplement dire Q Client dot send message. Et bien sûr, il existe une option asynchrone, mais laissez-moi vous expliquer quel devrait être le message. Notez donc qu'ils s'attendent à un texte de chaîne, mais que nous avons un objet de message électronique. Alors laissez-moi y aller et j'attendrai d'abord. Maintenant, comment puis-je convertir cela en quelque chose qui peut être envoyé sous forme de chaîne ? Eh bien, nous pouvons le sérialiser en JSON. Je peux donc dire que le message var est égal à JSON, convertissez cet objet sérialisé. Ensuite, nous transmettons notre e-mail qui convertira simplement notre classe en message JSON ou en objet de chaîne JSON. Ensuite, nous pouvons transmettre cette chaîne comme message. Nous pouvons extraire notre interface. C'est la seule méthode dont nous avons besoin pour extraire l'interface, enregistrer dans le fichier program.cs comme d'habitude, et nous l'ajoutons en tant que sculpture, comme les autres services qui l'ont précédée. Ensuite, nous pouvons modifier les crêtes ou assister au contrôle des inscriptions. Et une fois que nous avons introduit notre nouveau service IQ, IQ Service, j'aime bien ce nom. Nous pouvons maintenant modifier les hotspots. donc évident que Creates serait un point névralgique où, une fois que tout est terminé et que nous avons enregistré, nous voulons créer notre message électronique. Je peux donc dire que l'e-mail var est égal à un nouveau message électronique. Et je vais définir l'adresse e-mail comme étant l' adresse e-mail point de l'entité participante qui a été saisie. Exact. Nous pouvons définir l'horodatage comme une date et une heure connues en UTC, puis nous pouvons définir notre message comme bonjour, FirstName, LastName, hello. Et ils ne faisaient que concaténer. Nous utilisons donc, eh bien, l'interpolation. Nous utilisons donc l' interpolation ici. Et puis j'ai ajouté la ligne avec la barre oblique inverse n, barre oblique inverse r. Merci de vous être inscrite à cet événement. Et j'ai une réponse directe. Puis j'ai repris la phrase et j'ai dit que votre dossier avait été enregistré pour consultation ultérieure. Maintenant que j'ai cet objet de courrier électronique, je peux appeler mon service de file d'attente et C, envoyer un message et le transmettre à ces objets de courrier électronique. Bien entendu, nous savons que nous pouvons faire choses similaires ailleurs dans notre application, car si elle est modifiée, nous pourrions leur faire savoir qu'elle n'a pas été modifiée. Alors bonjour, FirstName, LastName, votre enregistrement a été modifié avec succès, puis nous envoyons ce message. Et puis, s'il est supprimé, je peux aussi le faire, car n'oubliez pas que nous aurions préchargé ces données ici. Donc, une fois que tout a été supprimé, nous créons notre message électronique et je l'ai copié et collé. Donc, évidemment, nous utiliserions les données comme objet ici pour l' adresse e-mail, le prénom, le nom de famille. Ensuite, le message électronique est modifié pour indiquer qu'il a été supprimé avec succès, puis nous l'envoyons. C'est donc tout ce que nous allions intégrer notre service de file d'attente à nos opérations. Maintenant, à notre retour, nous validerons tout cela. 16. Service de file d'attente: Alors allons-y et testons quelqu'un pour créer un nouvel enregistrement et télécharger une image. Et bien sûr, nous n'utilisons que des tests, des tests et des technologies de l'Internet des objets créés par l'industrie. Une fois que nous l'avons validé, que nous avons un enregistrement et que notre blob a été téléchargé, nous pouvons passer à notre explorateur de stockage. Et je vais tout rafraîchir pour voir si cette nouvelle file d'attente ou cette nouvelle raquette de tennis indique et dire Refresh. Maintenant, je vois les e-mails des participants dans ma file d'attente et j'y vais. Et j'ai plusieurs messages parce que je faisais des tests, n'est-ce pas ? Vous pouvez voir ici que nous avons plusieurs messages et que j'ai effectué toutes les opérations nécessaires pour m'assurer que chacun fonctionnait. J'en ai donc un ici qui montre que, lorsqu'il a été créé, votre enregistrement n'a pas été enregistré pour référence ultérieure. C'est bien. Et puis nous en avons un autre ici qui dit qu'il a été supprimé avec succès. Nous en avons un autre ici qui dit que tout allait bien, je n'ai apporté aucune modification, mais vous voyez ici que tous ces messages sont en fait en file d'attente. Imaginons maintenant que le service de messagerie ne soit pas en fait un service de messagerie, n'est-ce pas ? donc dû s'agir d'e-mails envoyés immédiatement. Mais notre service de courrier électronique n'en était qu'à ses débuts. Cela signifie que l'utilisateur se serait enregistré et que nous aurions quitté The Operation avec l' impression qu'il était ou qu'il s'agissait d'une distribution sur le terrain. Parce que le service de messagerie a ouvert le champ du site Web pour se connecter, puis a généré une exception et lui a probablement envoyé un message d'erreur. Nous ne voulons pas que cela se produise, n'est-ce pas ? Un autre scénario est que d'accord, peut-être que nous avons mis en place une gestion des erreurs appropriée. Donc, même si le donateur de services de messagerie à qui nous avons essayé de connecter, nous n'avons pas fait d'exception, mais cet e-mail est perdu à jamais, n'est-ce pas ? Le QI est donc un excellent moyen de conserver nos messages pour nos opérations jusqu'à ce que nous puissions les traiter plus tard. retour, maintenant que nous savons que notre q fonctionne comme prévu, nous allons créer un petit utilitaire qui sélectionnera les messages de la file d'attente. Et une fois que nous avons reçu les messages de la file d'attente, toutes les opérations que vous devez effectuer peuvent être effectuées. 17. Journaux et appels de services: Alors que nous testons notre application, je voulais juste prendre quelques secondes pour souligner ce qui se passe sur la console, afin que vous ayez une idée de ce qui se passe derrière tous ces appels de service. Nous avons donc connecté notre service de table ou notre service stockage Blob à notre service de stockage de files d'attente. Et si vous regardez la console ou les journaux publiés par l'application pour chaque requête, vous verrez que nous envoyons simplement GET et post et différents types de requêtes HTTP ou HTTPS à de nombreuses URL. Vraiment, ce n'est pas beaucoup plus compliqué que cela. donc Nos clients de service et tous ces éléments ne sont donc en fait que des wrappers pour les clients HTTP qui communiquent via des API RESTful avec chacun de nos services. Et nous avons dit au début du cours que les API RESTful nous permettaient d' interagir avec nos ressources et de les gérer . Voici un exemple concret de fonctionnement persistant. Donc, lorsque nous avons parlé à notre service de table, lorsque les RP sont chargés, nous avons essayé d'obtenir les données. Très bien, et plus tard, vous verrez que nous interagissons avec, accord, en voici un pour lequel nous avons un outil pour. Exact. Voici celui que je voulais où j'ai supprimé l'enregistrement. Il a donc été supprimé du Blob. Donc, si vous regardez l' URL, vous verrez qu'il s' agit du service blob, n'est-ce pas ? Et ce nom Blob a été supprimé. Et c'est une demande de suppression. Très bien, voici la sortie où quelque chose a été mis à jour sur le Q. Très bien, il quelque chose a été mis à jour sur le Q. s'agit donc de l' URL du service de file d'attente. Et voici une demande de publication où elle a créé quelque chose sous Q. Et voici comment je suis prise en train de sortir des tables. Je fais donc simplement remarquer que tout n'est en fait qu'un appel d'API RESTful qui se passe en arrière-plan. 18. Configurer le lecteur de messages en file d'attente: Maintenant que nous savons que notre service fonctionne, créons un service qui s'abonnera à ce service de file d'attente , puis consommera le message. Et puis, quoi que vous ayez besoin d'en faire, vous pouvez le faire par la suite. Mais créons un utilitaire qui se connectera à ces messages et les consommera. Que dois-je faire pour créer une application console ? Je vais donc, dans la solution, ouvrir un nouveau projet ou en ajouter un nouveau. Et celle-ci sera une simple application de console. Choisissez donc un modèle d' application de console. Et nous allons appeler cette console Dot Q Consumer Dots Demo. Ensuite, nous allons continuer et appuyer sur Suivant. Nous utiliserons les sept dernières versions de .net disponibles au moment de l'enregistrement et de la création. Je dois maintenant ajouter un package, et je dois ajouter le même package que celui que nous avions ajouté précédemment pour le stockage en file d'attente, savoir des files d'attente de stockage sans point. Je vais donc y aller rapidement et je pense que nous savons tous maintenant tout ce qu'il faut ajouter ou emballer rapidement. Je vais donc choisir cet itinéraire où je vais simplement créer un nouveau groupe d' éléments, puis simplement coller la même référence de package que celle qui se trouvait dans l'application MVC. Et garde ça. Et tu passeras en arrière-plan et tu résoudras cette dépendance pour moi. Écrivons maintenant du code. La première chose que nous voudrions faire, bien sûr, est de configurer ou d' établir la connexion à notre stockage en file d'attente, n'est-ce pas ? Et cela se fait via la chaîne de connexion de notre compte de stockage. Sachez que vous avez quelques options pour ce faire, la plus simple serait simplement créer une variable ici. Je m'appelle la chaîne de connexion et je lui donne la valeur. Mais pour la raison évidente que vous ne souhaitez pas placer votre chaîne de connexion directement dans le code et la couche codée en dur , nous n'allons pas adopter cette approche. Dans ce cas, nous pouvons utiliser un secret, ce qui signifie que nous devrions installer quelques packages supplémentaires et les stocker dans un fichier de configuration, puis les référencer en conséquence. Et puis, par extension, nous pouvons également simplement définir une variable d'environnement globale sur notre machine. Et puis, bien sûr, si nous voulons déployer cette application sur une autre machine, ils devront s'assurer que variable d' environnement existe également , quelqu'un qui adoptera cette approche pour cet exercice particulier. Pour ce faire, nous allons donc utiliser notre fenêtre de terminal. Et que vous utilisiez, si vous utilisez une machine Windows, nous allons utiliser la commande suivante. Ensuite, je vais vous montrer celui correspondant pour Linux et macOS. Si vous utilisez un ordinateur Windows, que vous utilisiez Visual Studio ou Visual Studio code, vous pouvez dire set X, prénom, je vois comme votre chaîne de connexion au stockage. Ensuite, nous plaçons la valeur ici. Je vais donc passer au projet Web où nous avions la valeur de la chaîne de connexion des exercices précédents. Et je vais l'utiliser ici comme valeur et ensemble. Assurez-vous que le formatage est correct. Vous pouvez voir que j'ai eu quelques erreurs parce que j'ai copié une virgule et j'ai ajouté des guillemets supplémentaires. Assurez-vous donc de n'avoir que les guillemets et la valeur intermédiaire. Maintenant, si vous utilisez Linux ou Mac OS, la commande est fondamentalement identique. Mais au lieu de dire set X, vous allez voir des exportations. Et c'est le même format pour exporter le nom de la variable , puis la valeur. L'un des inconvénients de cette méthode est que vous devrez peut-être redémarrer votre ordinateur par la suite pour pouvoir appuyer sur Pause, redémarrer, et à votre retour, nous reprendrons là où nous nous sommes arrêtés. Maintenant que nous avons défini cette variable d'environnement, nous pouvons définir la variable de chaîne de connexion ici. Je vais donc dire que la chaîne connexion est égale à l'environnement, obtenez la variable d'environnement, et nous la trouvons par son nom. Très bien, alors nous allons initialiser une nouvelle file d'attente de clients. Et ce sera similaire à ce que nous avons fait auparavant. client Cute Q est égal à nu q client, faisant référence à la chaîne de connexion et au nom de ce Q. Je vais essayer de récupérer des messages depuis la file d'attente. Donc, la première chose que je veux faire est assurer que l'assurance qualité existe, qui n'est que rudimentaire, n'est-ce pas ? Si j'attends, Q point Q existe. Et puis, à l'intérieur de cette déclaration, je vais continuer et vérifier les nombreux messages qui s'y trouvent. Alors, tout d'abord, pour obtenir la propriété. Je dis donc que Q properties est égal à notre poids q dot get properties a sink. Et puis, une fois que j'ai ces propriétés, je peux maintenant vérifier si les cônes de message sont approximatifs, désolés. Je vais dire que tandis que les propriétés qui se rapprochent du message, le d de Cohen est supérieur à zéro. Très bien, ce n'est donc qu'un chiffre qui indique le nombre de messages dans la file d'attente. Ensuite, je mets en place une boucle temporelle pour dire, eh bien, tant qu'il y a des messages dans la file d'attente, alors nous voulons faire quelque chose. Je vais donc aller chercher les messages. Je vais donc dire que message de chaîne est égal à et je vais attendre la méthode que je suis sur le point de créer, de récupérer. Le message suivant est sink, sinon nous n'avons pas nécessairement à suivre cette convention de dénomination asynchrone. Mais je veux récupérer, laissez-moi corriger mon orthographe. Ensuite, je vais dire console point, écrire une ligne et imprimer ce message. Et je ne fais que donner suite à la parole reçue. Laissez-nous implémenter cette méthode. Je vais donc simplement dégénérer la méthode ci-dessous. Ce sera une méthode asynchrone qui renverra une chaîne. Et dans le cadre de cette méthode, je vais d'abord récupérer un message. Non, vous pouvez récupérer plusieurs messages à la fois, n'est-ce pas ? Je voulais donc dire message de file d'attente, message récupéré, et c'est un tableau. Et puis je suis allé attendre que le point Q reçoive des messages asynchrones. Ensuite, nous pouvons prendre un cône. Ce cône représente le nombre maximum de messages le minimum est un et le maximum est 32. Je peux donc dire, donnez-moi jusqu'à 32 messages un à la fois. Mais pour l'instant, je vais juste en faire une. Nous allons donc les traiter un par un. Ensuite, je vais devoir convertir base 64 en un tableau d'octets, puis d'un tableau d'octets en une chaîne. Je vais t'expliquer tout cela. Dans notre explorateur de stockage. Lorsque nous regardons nos messages, nous voyons les messages collés en texte brut et cela semble correct. Cependant, lorsque vous double-cliquez dessus, vous verrez qu'il vous indique qu'il l'a décodé en base-64. Cela me montre donc le contenu du message. Mais en réalité, si vous regardiez les choses au repos, si quelqu'un veut accéder à la file d'attente et essayer de voir que les messages essaient d'intercepter les messages , il ne verrait pas simplement une chaîne codée en base 64 qui ne verrait une chaîne codée en base 64 qui ne verrait pas réellement les textes tels que vous les voyez. Non. C'est pourquoi, lorsque nous traitons ces messages, ils nous parviennent en fait sous forme de messages codés en base 64. Et puis je dois convertir à partir de la base 64, non ? Il s'agit donc de la chaîne encodée en base 64. Il s'agit donc en fait de données binaires, n'est-ce pas ? Et puis je peux reconvertir en UTF à partir de cette version bêta RE. C'est donc tout, tout ce flux doit fonctionner. Si nous utilisons le codage en base 64, après avoir récupéré le message de la file d'attente, je voudrais le supprimer. Je vais donc dire un message de suppression de poids q point asynchrone. Et nous allons supprimer en utilisant le message récupéré plutôt que l'identifiant du message et le reçu contextuel du message récupéré. Très bien, et si vous passez la souris sur ces propriétés, vous verrez ce que chacune d'entre elles signifie. Donc, essentiellement, après avoir traité le message ou après l'avoir récupéré nous pouvons le supprimer de la file d'attente. Ensuite, je vais renvoyer le message, que nous pourrons ensuite traiter. Je ne m'en souviens pas. Oui, nous allons consoler ce monde de rats, mais cela peut facilement être envoyé par e-mail ou stocké dans la base de données. Parce que s'il s'agit d'une opération asynchrone et que c'est quelque chose qui doit se produire par la suite. Comme nous l' avons déjà dit, en particulier dans une situation de microservices, il se peut que ce soient les agents qui se chargent du nœud en particulier dans une situation de microservices, il se peut que ce soient les agents qui se chargent du nœud, quel que soit le processus à l'origine du biais, n'est-ce pas ? Il ne s'agit donc que d'une simple application de console. Dans un scénario réel, vous utiliseriez probablement notre travail ou notre service qui est toujours actif que vous devrez exécuter manuellement à chaque fois. Le code ressemblerait à peu près à notre travail ou à notre service. Si c'était votre fonction, que nous aborderons plus tard dans le cours. Ensuite, nous verrons comment nous pouvons également gérer ce genre de situation. Allons-y, testons et je vais définir quelques points d'arrêt dans certains domaines clés. C'est juste pour que nous puissions suivre exactement ce qui se passe lorsque le cordon passe. Je vais donc m'assurer que la console est mon projet par défaut et procéder au débogage. Et nous avons atteint les premiers points d'arrêt, donc nous pouvons être certains que le Q existe bel et bien. Ensuite, je vais juste passer à la boucle complète. Il est donc allé chercher les propriétés. Regardons cet objet et nous voyons ici que le cône de message est approximativement de cinq. Donc, à cause de cela, nous entrons dans notre boucle complète. Ensuite, nous allons récupérer le message suivant. Et je vais juste appuyer sur F5 pour qu'il saute vers le bas. Laissez-nous évaluer. Nous avons d'abord reçu un message, non, parce que ce sont des messages, même si nous en spécifions un, il renverra toujours un tableau ou un type de collection. Donc, vraiment et sincèrement, il va renvoyer un tableau avec ce nombre de messages. Nous obtenons donc un tableau dans ce cas avec un seul message, c'est bien. Maintenant, lorsque nous examinerons cet objet de message récupéré, nous verrons que nous avons notre corps. Nous avons des cônes de retrait de la file d'attente, ce qui signifie combien de fois ce message a-t-il été rouge ? Nous avons une date d'expiration en fonction des différentes configurations que nous aurions configurées et nous avons des textes de message Nous avons donc toutes ces propriétés sur cet objet de message, cet objet de message de file d'attente. Maintenant, notez que le corps est une chaîne codée. C'est donc de cela que nous parlons. Cela n'a aucun sens que n'importe quel être humain, sauf si vous êtes un ordinateur ambulant. Nous allons donc le convertir en chaîne, puis le convertir en tableau d'octets. Ensuite, nous allons convertir le tableau d' octets en une chaîne réelle. Ensuite, nous allons supprimer le message, car maintenant que nous l'avons récupéré, nous n'en avons plus besoin dans la file d'attente. Voici donc le message qui correspond au corps JSON nous avons parlé ou que nous avons vu dans l'aperçu. Nous pouvons donc maintenant procéder à sa suppression. Et puis le message est renvoyé. Et je vais simplement appuyer sur Continuer et supprimer les points d'arrêt afin que tous les messages soient imprimés sur la console. Et là, j'ai une exception. 19. Nettoyage et optimisation de codes: Bon, bon retour les gars. Dans cette leçon, nous allons simplement optimiser le code et le nettoyer. Et la première activité de nettoyage des barres obliques d'optimisation nous ramène directement à l' application console que nous venons de créer. Donc, ce que j'ai fait, c'est remplacer la boucle while par une boucle pour. Comme je reçois un certain nombre de messages, il est logique de les lire un nombre de fois différent, n' est-ce pas ? Cela nous aidera donc certainement à surmonter cette erreur d'index hors limites , car nous n'irons aussi loin qu' une fois que nous serons dans les cônes. C'est donc notre refactorisation rapide. Bien entendu, il existe plusieurs manières de procéder et c'est simplement une erreur de jugement qui m'a poussé à faire la boucle complète au départ. Hé, on vit, on apprend. C'est donc notre première correction. Non, je voudrais me concentrer à nouveau sur projet Web et sur le fait que, d'accord, nous avons le stockage ou la chaîne de deux points ici. Mais dans nos services tels que Blob Storage, Queue Storage et Table Storage, nous instancions un client à chaque fois. Nous pouvons donc probablement refactoriser cela un peu. Commençons donc par obtenir un nouveau package. Et je vais simplement utiliser la console de développement ici que nous puissions tous être sur la même longueur d'onde, que vous utilisiez Visual Studio ou Visual Studio Code. Et dans le projet Web, je vais ajouter un package à dotnet. Et le package est constitué d'extensions Microsoft point qui sont les vôtres. Cela nous donnera maintenant la possibilité d'accéder à notre fichier program.cs. Et pendant l'installation, je commence à écrire le code. Cela me donne donc la possibilité d'accéder au fichier program.cs et de voir un générateur de points services, et de l'ajouter en tant que services ou clients plutôt. Ensuite, je peux l'initialiser avec un générateur et le corps lambda et le terminer par un point-virgule. Alors, que faisons-nous là-dedans ? Ajoutez un zéro glande. Eh bien, je peux maintenant dire constructeur. Points, ajoutez des clients. Donc, vous voyez ici, non, je peux ajouter un client de service blob, je peux ajouter des plans de service de file d'attente, et je peux ajouter un client de service de table, tout cela ici. Commençons donc par ajouter un client de service blob, et nous avons plusieurs surcharges. La surcharge la plus facile à utiliser est celle qui nécessite une chaîne de connexion. Je peux donc passer à la configuration et nous obtenons simplement cette chaîne de connexion de stockage. Et nous allons passer à la configuration des points du générateur. Je n'ai pas bien orthographié. Points de configuration. Eh bien, pas ça. Construisez notre configuration. Ensuite, la clé que nous recherchons est notre chaîne de connexion de stockage. Maintenant que j'ai cet endroit, je peux le réutiliser ailleurs. Donc, le générateur doit ajouter un blob, un client de service, et je transmets la valeur de cette chaîne de connexion. D'accord, je peux aussi construire sa fille devait servir les clients et devinez quoi ? Il prend la chaîne de connexion et devinez quoi ? Je peux également ajouter. Si vous avez dit table, vous avez tout à fait raison. Passons maintenant un peu au client du service de file d'attente. Si nous passons au service de file d'attente, n'oubliez pas que lorsque nous avons créé un nouveau client, nous avions plusieurs options. Et cette section d'options incluait l' encodage par défaut que nous voulons. Donc, de retour dans le fichier program.cs, nous pouvons réellement étendre cette configuration en ajoutant options de configuration par points à la fin de cette ligne. Ensuite, nous allons créer un petit corps de configuration. J'utilise juste C comme jeton Lambda. Ensuite, dans cette section de configuration, je définis que le codage des messages à points C est égal au même codage en base 64. Sachez que tout cela est fait. Nous pouvons injecter dans nos services existants en utilisant ces services au lieu de les approvisionner à la volée. Nous pouvons donc commencer par le client Blob Storage. Et ce que nous allons faire, c'est utiliser le service injecté pour obtenir un client conteneur. Et nous n'avons pas besoin d'appeler cette méthode à chaque fois. Je vais donc injecter le client du service blob dans ce constructeur et initialiser un champ local. Nous savons déjà comment procéder. Et avec cette injection, je peux en fait, au lieu de dire que le conteneur var est égal à notre poids, obtenir un client Blob Container. Je peux en fait le remplacer par un client de service blob dot get container. Et ce n'est pas un lavabo. C'est pourquoi nous avons cette ligne rouge. Ça va ? Et je peux parcourir et remplacer toutes les instances de cette méthode manuelle pour utiliser simplement notre client. Et puis si je veux, je peux effacer cette méthode. Je vais le laisser là pour la postérité afin que nous puissions voir ce qui était autrefois. Nous avons les clients du service de table que nous injectons et initialisons. Ensuite, nous pouvons remplacer notre méthode pour obtenir un client de table. Je peux simplement appeler le client de service, obtenir un point, obtenir un client de table. Ensuite, nous référençons le nom de la table et juste le carton qui se répand. Nous y voilà. Maintenant, toutes ces références, et celles-ci sont probablement plus similaires à l'initialisation du client Blob Storage. Et il s'agit toujours du stockage de la file d'attente ou de l'initialisation du client. Donc c'est très bien. Et bien sûr, cette méthode est là pour référence. Je les ai toutes passées en revue et remplacées, mais je voulais simplement souligner que ce que nous ne faisons pas ici, c'est créer, sinon exister. Il est donc possible qu'en obtenant le client, il renvoie une valeur nulle parce qu'il n'existe pas. Un autre facteur aurait donc pu être de simplement éliminer cela et de continuer renvoyer le client sur la base de cet appel. Très bien, nous pourrions donc toujours conserver l'appel de méthode correspondant et renvoyer le client pour chaque appel, n'est-ce pas ? Ou pour chaque méthode. Alors ça dépend de toi, non ? Nous aurions également pu simplement définir un client de table en haut ici, ou un champ en haut. Ensuite, nous initialisons le champ à l'intérieur de notre constructeur, puis nous utilisons simplement les champs. Il existe donc plusieurs façons de le faire. Maintenant, sur cette note, je vais revenir au fichier program.cs et nous allons examiner une autre façon aborder cette question. Ce que nous faisons ici, c'est injecter le client, le client du service. Ensuite, parce que nous injectons le plan de service, nous devons créer une nouvelle instance du client actuel qui nous connectera à la ressource. Et si nous voulions simplement enregistrer le client direct sur la ressource ? Nous devrions donc adopter une approche légèrement différente ce qui concerne ce que nous faisons ici. Et je vais juste le faire dans une autre annonce section « Vos clients ». Juste pour que nous puissions avoir un accord initial. Ça va ? Supposons donc que je voulais directement le client de file d'attente, non le plan de service de file d'attente, pas le nom du service, mais le client réel. En fait, j'utiliserais le client Builder Dot Add. Cela me permet ensuite de spécifier les types de données. Je veux donc la file d'attente, le client et les options Q. Ensuite, je vais initialiser un délégué en utilisant espaces réservés pour les paramètres attendus pour cette méthode Si vous passez la souris sur l'usine AD, vous verrez quels paramètres sont représentés. Ensuite, nous allons utiliser une expression lambda pour le corps de notre objet. Et puis, à l'intérieur de cette méthode, on s'attendait à ce qu'une nouvelle instance de Q client soit renvoyée. Cela signifie donc que si je passe à ce service de file d'attente où nous aurions initialisé nos clients. Je pourrais en fait utiliser ce code ici et renvoyer un nouveau client qui utilise la configuration ou la chaîne de connexion au stockage. Je pourrais également mettre le nom de la file d'attente dans ma configuration. Je n'ai donc pas besoin de le coder en dur dans le fichier. Alors allons-y. En fait, je vais créer une toute nouvelle section dans la configuration et je vais l'appeler votre stockage. Et je vais y mettre la chaîne de connexion. Et je vais juste retirer que le stockage de mots est un peu redondant. Maintenant, la clé et moi faisons de même, même temps, parce que je ne veux pas oublier. Maintenant, la clé de la configuration de la de connexion serait la chaîne connexion deux-points Azure Storage, n'est-ce pas ? Parce que maintenant c'est dans cette sous-section. Et je fais tout ça, non. Cela a donc mis une virgule là. Maintenant, je peux mettre le nom de la file d'attente ou plusieurs noms de file d'attente, quels que soient les noms Q et dont j'aurai besoin pour mon application. Je peux les mettre ici. Donc, le nom de la file d'attente sera, ne me le dites pas, nous y voilà. Moi aussi. Nous y voilà. Le nom de la file d'attente sera donc heure des e-mails des participants et je vais simplement utiliser le Blob Storage. Je viens de définir les clés à partir de null et du stockage dans la table. Parce que cette technique peut être utilisée pour les trois services de stockage. Donc, de retour dans le fichier program.cs, je vais faire un ajustement rapide car je vais avoir besoin des valeurs de configuration ici. Je vais donc passer de Builder à simplement B. Et puis le nom de la file d'attente sera modifié dans la configuration des points du générateur. Ensuite, nous pouvons y faire référence en tant que section de stockage et en tant que clé du nom de la file d'attente. Ça va ? Et bien sûr, nous devons y retourner. Cela doit donc être renvoyé aux clients UQ avec toutes ces valeurs. Maintenant que nous avons enregistré ces clients Q dans le service de file d'attente, je peux injecter directement ce client Q. Je n'ai pas besoin de cette référence directe au nom de la file d'attente. Et je peux utiliser ce client mignon pour effectuer toutes les communications en conséquence. Je n'ai donc pas du tout besoin de le faire lors de l'initialisation dans le message d'envoi ou dans ce service ? Non, je peux faire quelque chose de similaire pour le rangement de table. Je peux simplement prendre le nom de cette table et mettre dans les paramètres de notre application json. Et puis dans notre fichier program.cs, je vais simplement copier et coller le client de file d'attente dans la même section. Et nous allons ajouter un client pour les clients de table avec des options de client de table. Et ce que nous faisons ici, c'est renvoyer une nouvelle instance de client de table avec une chaîne de connexion au stockage et le nom, la clé ou le stockage de notre table de stockage Azure . Table, nom de la table de stockage, peu importe comment vous l'appelez stockage de table. Ça va ? Maintenant, je peux injecter ce client de table directement dans le service de stockage de tables. Donc, au lieu d'injecter le client de service , faisons les deux. Donc, table client et moi allons l'initialiser. Je laisse donc tout ce code ici pour que vous puissiez vous y référer ultérieurement, n'est-ce pas ? Ce n'est pas nécessairement que vous avez besoin de tout cela et je pense que nous le savons maintenant. Mais je n'ai pas besoin d'initialiser un client de table à chaque fois que je peux simplement utiliser mon service injecté, peu comme nous devions le faire avec les clients Q. Maintenant, je peux simplement créer un client de table directement via cette base de code. Ce ne sont donc que quelques optimisations que vous pouvez apporter à votre code pour vous assurer que, oh, eh bien, je n'ai pas à modifier celui-ci. Cette méthode serait donc désormais archivée, pour ainsi dire, n'est-ce pas ? Voici donc quelques optimisations et activités de nettoyage que vous pouvez effectuer en supprimant certaines de ces références codées en dur à la configuration. Et puis, bien sûr, nous avons discuté du fait que vous ne souhaitez probablement stocker toutes ces clés dans les paramètres de l'application. Vous pourriez donc utiliser des secrets. Et pour utiliser les secrets, il vous suffit de cliquer avec le bouton droit sur le fichier image CSP et de descendre pour gérer les secrets des utilisateurs. Ensuite, vous pouvez y ajouter cette section. Il ne s'agit donc pas d'une solution à intégrer dans le contrôle des sources, et elle n'est pas immédiatement visible aux regards indiscrets, mais elle est toujours accessible via notre configuration de démarrage. Aucune raison pour laquelle je ne configure pas un client blob pendant la fermeture. Je ne vais pas configurer notre client Blob. Parce que n'oubliez pas que le client Blob est créé directement contre le Blob en fonction du genou. Bien que cela soit un peu plus efficace, il suffit de procéder à l'injection des voies de service. Nous devons encore créer un client la volée en fonction du blob sur le point d'être traité. Parce qu'une fois de plus, nous ne savons pas quel blob va être traité pour commencer. Vous pouvez donc aller de l'avant et valider que ce sont des incitations et que ces nouvelles inscriptions fonctionnent. Et je vais juste commenter l'un d'entre eux. Et c'est tout pour cette activité. Clôturons ce module. 20. Conclusion: Nous avons donc trouvé un autre masque, et nous avons terminé ce module en tant que stockage. Pendant la durée de ce module, nous avons examiné comment créer et gérer un compte de stockage. Cela nous a impliqué d' interagir avec Blob Table et Queue Storage Services, font tous partie de cette offre de comptes de stockage de Microsoft Azure. Nous avons examiné comment utiliser le portail Azure ou le navigateur de stockage que nous pouvions télécharger sur votre ordinateur pour interagir avec les différents services. Encore une fois, Blob Table, Queue Storage. Nous avons donc vu que nous pouvions gérer le contenu de ceux-ci, ce soit depuis le portail Azure ou localement à l'aide du navigateur de stockage. Nous avons également examiné comment développer une solution Dotnet Core pour utiliser le compte de stockage. Nous avons donc examiné ici le stockage et la récupération de la chaîne de connexion au stockage ou aux cônes pendant tout le week-end, et nous avons écrit du code pour interagir avec les différents services la nuance se situant entre les deux. Et en fin de compte, nous pouvons tous en dire autant du fait que chacun de ces services est géré par le biais d'appels et d'un encodage d'API RESTful. Tout ce que nous faisons, c'est fournir clients HTTP pour interagir avec les services sous-jacents. Nous avons également couronné le tout en examinant comment nous pouvions faciliter la communication asynchrone à l'aide de files d'attente. Cela nous a permis d' implémenter une sorte de modèle Pub Sub dans lequel nous publions un message dans la file d'attente. Ensuite, nous avons eu une autre application qui était abonnée à la file d'attente et qui retirait le message, traitait et passait à autre chose. Voici donc un exemple du modèle contextuel et de la façon dont nous pouvons implémenter une communication asynchrone. Je vous remercie de m'avoir rejoint dans ce module. Je te verrai dans la prochaine leçon.