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.