Transkripte
1. Einführung: In diesem Modul betrachten
wir es als Ihre Speicherkonten. An diesem Montag
werden wir uns
die Angebote für Azure-Speicherkonten ansehen. Wir werden uns
Blob Storage,
Table Storage , Queue Storage ansehen. Und letztendlich werden wir eine Lösung
entwickeln, die mit jeder dieser
Komponenten von Azure Storage
interagiert. Also
werden wir wie immer weitermachen unsere Lager
- oder Kegel erstellen. Schauen Sie sich die verschiedenen Optionen und erkunden Sie alle Nuancen
und finden Sie heraus, wie
Sie
diese Angebote in
unsere eigenen Lösungen integrieren können . Also bleib dran. Das
wird ein lustiges Modul.
2. Azure Blob Storage: Zu Beginn schauen
wir uns zunächst die Azure
Blob-Speicherangebote
an. Azure Blob Storage ist jetzt
ein cloudbasierter Dienst zum Speichern unstrukturierter Daten wie Textdateien, Bilder, Videos usw. Es ist eine skalierbare, sichere
und sehr kostengünstige Lösung für die Speicherung großer
Datenmengen. Und es unterstützt
Sicherheitsfunktionen wie Verschlüsselung, Authentifizierung
und Autorisierung. Es gibt eine integrierte Integration
für Azure AD und Ihre Daten werden
sowohl bei der Übertragung als auch bei der Speicherung verschlüsselt. Daten kann
überall auf der Welt über
HTTP- oder HTTPS-Protokolle zugegriffen werden , was sie zu einem geeigneten
Kandidaten für CDN-Sachen macht. CBN, diese Buchstaben bedeuten
Content Delivery Network. Aufgrund dieser Flexibilität ist
Blob Storage dafür
perfekt geeignet. Integrieren oder Erstellen von
Apps zur Unterstützung des Blob-Speicherangebots ist sehr einfach, wenn Sie Dotnet, Ruby,
Java, Python und mehrere
andere Frameworks
verwenden .
Sie können jederzeit nachschauen, ob das entsprechende Framework als Referenz verfügbar ist
. Aber natürlich sind es die Punktzahlen der
Dotnet-Entwickler und damit haben wir alles im Griff. Jetzt wird es häufig für
Szenarien verwendet, in denen wir Bilder
oder Dokumente
direkt an den Browser senden möchten . Wir müssen den
verteilten Zugriff auf
eine Reihe von Dokumenten erleichtern . Wenn Sie Inhalte
wie Video und Audio streamen möchten, wenn Sie
Protokolldateien speichern möchten und zwar kontinuierlich, in diese Protokolldateien. Oder wenn wir
Daten für Backup,
Disaster Recovery
und Archivierung speichern möchten . Wenn Sie sich für
Datenwissenschaft und Big Data interessieren, werden
Sie feststellen, dass
es ein Angebot namens
Azure Data
Lake Storage Gen2 gibt , Microsofts
Big-Data-Analyselösung
für die Cloud für
Unternehmen . Dies bietet ein
hierarchisches Dateisystem sowie die Vorteile
des Blob-Speichers. diesen Vorteilen gehören
die Tatsache, dass es kostengünstig ist, über eine gestufte
Speicherverfügbarkeit, hohe Konsistenz und
Disaster Recovery-Funktionen verfügt. Jetzt haben wir gerade die
Speicherstufen erwähnt. Es gibt also drei
Arten von Speicherebenen. Die erste, die wir uns
ansehen, ist diese
Hot-Hot-Storage-Ebene, die
für Datenanalysten verwendet wird , auf die häufig
zugegriffen wird. Sie werden sehen, dass dies die
teuerste Option ist. Also, wenn Sie wissen, dass
Sie immer
zum Blob-Speicher gehen , um
auf diese Datei zuzugreifen, vielleicht Videos, die gestreamt
werden,
Audio, das gestreamt wird. Dann würden Sie es
auf der Hot-Storage-Tier haben wollen. Dann haben wir die
coole Speicherebene, die für Daten verwendet wird, auf die weniger
häufig zugegriffen wird. Und natürlich ist es etwas
günstiger als Hot,
da der Traffic
nicht gegen die Datei oder
die Dateien gerichtet ist . Wenn Sie also
versuchen, auf eine Datei zuzugreifen, kann das Laden der Datei etwas
länger dauern. Aber das ist natürlich
besser für Dateien, die langfristig gespeichert
werden sollen und mit denen nicht so viel interagiert werden soll. Dann haben wir die Archivierungsebene, und zwar für Daten, auf die
selten zugegriffen wird. Dies gilt also für Dateien, bei
denen
Organisationen im Allgemeinen Dateien oder Aufzeichnungen
bis zu sieben Jahre lang
aufbewahren müssen . Ordnung, Sie möchten also Dateien
archivieren, vielleicht können Sie sie nach
dem dritten Jahr in den
Archivspeicher
legen , weil Sie nicht mehr so oft auf sie zugreifen
werden. Und wenn Sie zu Access gehen, wird
es viel länger dauern. Es muss diese Datei oder
diesen Blob rehydrieren, dann würde es ihn zurückbringen. Das wird natürlich für erweiterte
Backups
verwendet und ist die
kostengünstigste Option. Jetzt hat ein Speicher-Up-Dolon mindestens zwei Hauptkomponenten , die Sie in allen
anderen Speichertypen sehen. Aber da wir über Blobs
sprechen, werde
ich die
Entzündung im Verhältnis zu Blobs irgendwie anpassen. Das erste, was Sie haben,
sind die tatsächlichen Konten. Dies bietet nun einen Namespace in Azure für Ihre Daten,
und jedes Objekt, das ich verwende in Azure Storage
gespeichert ist,
hätte eine Adresse, die diesen eindeutigen
Kontonamen
enthält. Dann haben wir den Container und unser Container organisiert
alle Blobs ähnlich wie Sie es von
einem Dateisystem wie
Windows oder Linux erwarten würden einem Dateisystem wie , um Ihre Dateien zu
organisieren. Diese Art von Ordnerstrukturhierarchie steht Ihnen in unserem Container
zur Verfügung. Dann stellt der Blob
eine physische Datei dar, die im Container
gespeichert ist. Es gibt ein Diagramm, das diese Hierarchie
zeigt. Es gibt verschiedene Arten von Blobs. Blob ist ein Blob, ich meine, es ist eine Datei, die
in diesem Speicher oder in diesen Kegeln gespeichert ist, aber dann müssen verschiedene
Blobs aus verschiedenen
Gründen unterschiedlich
behandelt werden . Der erste, den wir
haben, ist ein Blockblob
, der wahrscheinlich der häufigste ist. Wir verwenden das, um
Text- oder Binärdaten zu speichern. Und es besteht aus
Datenblöcken, die
bis zu 190,7 Trilobiten speichern können , nicht Terror, sondern Tilly-Bytes. Dann müssen wir Blobs anhängen. Nun, das hat Blöcke, die den Blockblobs
ähnlich sind. Nun, sie sind
für den Append-Betrieb optimiert. Das wäre also ideal für ein Szenario, in dem wir
Daten von einer virtuellen Maschine
oder in Ihrem App Service protokollieren
müssen . Wenn du dich erinnerst, als wir gerade
beim App Service Logging waren, hätten
wir uns dafür entscheiden können, uns in einem Blob zu
loggen, oder? Das würden wir also verwenden. Es würde einen Append
Blob für diese Situation bereitstellen. Der nächste Typ
wären Seitenblobs. Seitenblobs speichern
Direktzugriffsdateien mit einer Größe von bis zu 8 KB Diese werden im Allgemeinen als
virtuelle Festplattendateien
für unsere virtuellen
Maschinen in Azure verwendet virtuelle Festplattendateien . Als Nächstes schauen wir uns das
als Ihren Tabellenspeicher an.
3. Tabellen- und Warteschlangenspeicher verstehen: Nun, Ihr Tabellenspeicher
ist ein Dienst, nichtrelationale
oder unstrukturierte Daten
speichert, die
auch als SQL bezeichnet werden. Und es ist wieder ein
Cloud-Dienst, uns
die Speicherung von
Schlüsselattributen
in einem schemalosen Design bietet . Jetzt hätten Sie
gesehen, dass als
Ihr Tabellenspeicher referenziert wird,
wenn wir uns andere Cosmos DB ansehen. Und es ist eine der APIs
, die Azure Cosmos DB unterstützt. Wenn Sie also mit
Azure-Speichertabellen oder
Table Storage beginnen Azure-Speichertabellen oder
Table Storage und dann für
mehr Speicher und
mehr Redundanz migrieren müssen , können Sie zu Cosmos DB wechseln
. Aber das ist ein
ausgezeichneter Anfang. Wenn Sie sich Ihrer
Datenanforderungen nicht sicher sind und in der Lage
sein müssen , sich an neue
Anforderungen in Bezug auf oder Details anzupassen, ist
dies eine
hervorragende Lösung Anfang, da
sie schemalos sich
daher immer Ihren Bedürfnissen anpassen kann
. Der Zugriff ist jetzt schnell und kostengünstig und im Allgemeinen günstiger
als bei anderen SQL-Angeboten für
ähnliche Datenmengen. Sie können dies auch in Betracht ziehen,
wenn Sie mit unserer relationalen
oder Azure SQL-Instanz beginnen möchten
und wissen, dass
Sie nicht so viele Daten im
Voraus speichern werden , dass Sie möglicherweise
mit Tabellen beginnen und dann hochfahren. Aber natürlich werden all
diese Dinge Ihre Entscheidungen
beeinflussen. Der nächste Speichertyp, den
wir haben, ist der Queue-Speicher. Dies ist jetzt ein
Dienst zum Speichern großen Anzahl von Nachrichten. diese Nachrichten kann überall durch
authentifizierte Anrufe
über HTTP oder HTTPS
zugegriffen werden. Wenn Sie Ihren Warteschlangenspeicher
einrichten, erhalten
Sie im Wesentlichen einen Link , über den Sie
den Speicher abonnieren und Nachrichten aus der Warteschlange lesen und
schreiben können . Warteschlangennachrichten können
bis zu 64 KB groß sein. Und je nach Kapazitätslimit
Ihres Speichers oder Ihrer Kegel können Sie so
viele Nachrichten wie möglich erhalten. Allgemein bekannt als Ihre Cues, Speicher oder Warteschlangen im Allgemeinen,
werden verwendet, um einen
Rückstand an Arbeitselementen zu erstellen. Der Prozess erfolgt asynchron. Das heißt,
wenn Sie beispielsweise eine Anwendung
erstellen, die eine E-Mail senden
muss, möchten Sie, dass die Anwendung
angehalten wird, während Sie eine Verbindung
zum E-Mail-Server herstellen, den Inhalt des
E-Mail-Versands, der E-Mail
herausfinden ,
warten, bis sie
erfolgreich war, dann versendet, und dann kann der Benutzer
fortfahren, vielleicht auch nicht. IQ würde es Ihnen also ermöglichen
, diese Informationen weiterzugeben
und dann mit
Ihrer Bewerbung fortzufahren , diese Informationen weiterzugeben . Und dann hätten Sie
einen anderen Dienst , der diese Nachricht wahrscheinlich aus
der Warteschlange nimmt und
die E-Mail irgendwann versendet , sodass wir, die Benutzererfahrung
, nicht beeinträchtigt werden. Und das ist nur ein Beispiel. Warteschlangen können auf verschiedene
Weise verwendet werden, insbesondere wenn es sich
um Microservices handelt. Aber wir werden einige Beispiele
mit diesem Zeug
durchgehen . Wir sehen uns also in der nächsten
Lektion, in der wir anfangen.
4. Ein Azure Storage-Konto erstellen: Jetzt
erstellen
wir von unserem Portal aus ein neues Speicherkonto. Lassen Sie uns also gleich loslegen. Wir gehen zu
unseren Pillen über und wählen Ressource
erstellen. Und von hier aus werden wir
nach Speicherplatz suchen. Ich kann also einfach Speicher eingeben, Enter
drücken und
okay, lassen Sie uns einfach das
Autocomplete-Speicherkonto verwenden. Wir wollen ein Lager mit Kegeln, also wählen wir das aus
und erstellen von hier aus, lassen Sie uns
unser Formular wie gewohnt ausfüllen. Da es sich bei diesem Speicher also um einen
von Microsoft verwalteten Dienst handelt, Blob Storage Data
Lake Gen2 und Azure Files
umfasst. Wir haben nicht wirklich
über Azure Files gesprochen, aber das werde ich ein bisschen erklären. Warteschlangen und Tische. Nein, es ist wichtig, dass Sie diese Einstellungen richtig vornehmen,
da einige Dinge je
nach Stufe und Art
des von Ihnen bereitgestellten Speicherkontos
verfügbar sind. Als Erstes
wählen Sie wie gewohnt die Warenkorb-Ressourcengruppe aus. Also lasst uns weitermachen und das tun. Und dann für den Namen des Speichers werde
ich sagen, da Sie ein Pferd sind, werde
ich natürlich
die beste Zone auswählen , die
meinen Lösungsbedürfnissen entspricht. Und dann können wir uns eine Aufführung
aussuchen. Wollen wir also den Standard, der der empfohlene
ist, oder wollen wir Premium, vier Szenarien,
die eine sehr geringe Latenz erfordern. Für diese Demo werden
wir also den Standard beibehalten. Wenn Sie andere Bedürfnisse
haben, wählen
Sie natürlich den passenden aus. Auch für die Redundanz. Ich entscheide mich einfach für
lokal redundant. Und Redundanz, etwas,
das Sie je nach Bedarf auch bei jedem Service immer
wieder
berücksichtigen sollten bei jedem Service immer
wieder
berücksichtigen . Also wähle ich lokal
redundanten Speicher. Fahren Sie mit der nächsten Option fort. Ich lasse alles
, was angekreuzt war, ich lasse es angekreuzt. Und wenn wir dann
einige Big-Data-Operationen durchführen würden
, könnten wir
einen Data Lake Gen2 für den
hierarchischen Namespace
wählen, da einige Big-Data-Operationen durchführen würden
, könnten wir
einen Data Lake Gen2 für den
hierarchischen Namespace
wählen einen Data Lake Gen2 für wir keine Big-Data-Operationen
durchführen, also lasse ich das in Ruhe. Und wenn wir dann nach unten
scrollen, können wir hier sehen, wollen wir das Warme oder das Kalte? Denken Sie also an Hotkeys für häufig aufgerufene
tägliche Nutzungsszenarien. Vielleicht wie CDN. Vielleicht
speichert
die gesamte Organisation dort die gesamte Organisation Dateien und
liest und schreibt. Im Gegensatz zum coolen Speicher, in dem
Sie wahrscheinlich Dateien ablegen würden auf
die hin und
wieder zugegriffen wird. In Ordnung. Dann
haben wir Azure-Dateien. Ihre Dateien
sind also eine Bereitstellung des Speicherkontos
, das uns
einen vollständig verwalteten
Dateiaustausch in der Cloud ermöglicht . Und sie sind
über Industriestandards,
Server Message Block
- oder SMB-Protokolle,
Netzwerkdateisystem
- oder NFS-Protokolle
oder auch nur eine RESTful-API zugänglich Server Message Block
- oder SMB-Protokolle, Netzwerkdateisystem
- oder NFS-Protokolle . In einfacherem Englisch. Ihre Dateien wären wie
ein in Cloud Filesharing , das Sie
für Ihr Unternehmen einrichten könnten um das lokale Shear zu ersetzen. Da wir die gemeinsame Nutzung von Dateien nicht
ermöglichen, werde
ich große Dateifreigaben nicht zulassen oder
aktivieren. Und dann können wir zum
Netzwerken übergehen und alles, was
da ist, der Fehler ist in Ordnung. Datenschutz. Hier können wir also Optionen
für den Umgang mit den Daten einrichten . Ich werde die
Standardwerte angekreuzt lassen, aber ich ermutige Sie, die einzelnen Werte
durchzulesen, um zu sehen was darin steht, und
diese Werte
je nach Urinbedarf zu ändern . Natürlich. Wir können auch die
Versionsverfolgung für unsere Blobs aktivieren. Wenn Sie mehrere Dateien haben, mehrere Versionen einer Datei haben, wird dieses Protokoll geführt. Und Sie können einen
Change-Feed aktivieren, nur für den Fall, dass Sie einen Dienst
haben , der den Blob-Status
abonnieren muss, okay, nun, diese Änderung, ich muss eine Aktion auslösen. sind also Dinge, die Sie Betracht ziehen
können, wenn Sie
einige andere Workflows auf
der Grundlage der Blobs und Aktivitäten automatisieren
möchten einige andere Workflows auf
der Grundlage , die für Ihre Blobs
ausgeführt werden. Wenn wir nun zur Verschlüsselung
übergehen,
habe ich
bereits erwähnt, dass Daten sowohl bei der Speicherung bei
der Übertragung
verschlüsselt werden. Sie zeigen
Ihnen also nur die Art der Verschlüsselung. Ich lasse die Standardeinstellungen
dort und dann können wir auswählen, welche Dienste vom
Kunden verwaltete Schlüssel unterstützen, und ich belasse diese als Standard. Als nächstes
wären also wieder unsere Tags dran. Was? Ich springe einfach
rüber, um es zu überprüfen. Und sobald diese Überprüfung erfolgreich
abgeschlossen ist, können
wir
unser Speicherkonto erstellen. Sobald die Bereitstellung abgeschlossen ist, können
wir auf Gehe zur Ressource klicken. Und sobald wir dort sind, werden
wir sehen, dass unser Blob-Speicher - oder Speicherkonto erstellt wird. Und von hier aus können wir verschiedene Dinge
tun. Wenn wir also
zurückkommen, werden wir die
verschiedenen
Optionen untersuchen und Hold kann mit
den verschiedenen Komponenten
unseres Speicherkontos interagieren .
5. Azure Storage Emulator: Erwähnenswert ist nun
, dass wir Zugriff auf
einen lokalen Emulator
für Azure-Speicher haben , der Azurit heißt. Und das ist Open Source
und plattformübergreifend. Sie haben also mehrere Installationsoptionen
und Sie werden hier sehen dass es
plattformübergreifende Unterstützung
unter Windows, Linux und macOS bietet . Und es ermöglicht uns
freien lokalen Zugriff auf eine Umgebung
zum
Testen von Blob Storage, Queue-Storage und
Tabellenspeicher. Also all die Aktivitäten, die wir im
Begriff sind , mit all
diesen Diensten zu tun ,
könnten wir tatsächlich durchführen, wenn wir unsere Bereitstellung implementieren, diesen lokalen Emulator
für diese Dienste. Das Einrichten der Dienste
ist jetzt relativ einfach. Wenn Sie
Visual Studio 2022 verwenden, erhalten
Sie es automatisch. Wenn Sie
Visual Studio Code verwenden, können
Sie ihn für Erweiterungen erhalten. Wenn Sie npm verwenden, können
Sie einen Befehl ausführen, wenn
Sie Darker verwenden, als Sie das
Image abrufen und installieren können. Und Sie können jederzeit direkt
zum Azurite Git Repo,
Repo gehen und es klonen. Und um es auszuführen,
haben Sie mehrere Möglichkeiten, mit Azurite zu interagieren, wenn
Sie
Visual Studio, Visual Studio Code usw. verwenden. Sie können
also diese Dokumentation lesen, wenn Sie nur eine lokale
Umgebung einrichten
möchten. Und dann können Sie
weitermachen und auf sie zugreifen. Wissen Sie, wir werden
den Storage Explorer im
Laufe
dieses Moduls etwas genauer untersuchen den Storage Explorer im . Aber ich wollte nur darauf
hinweisen, um auf die lokale Umgebung
zuzugreifen und Interaktionen
mit
den verschiedenen Komponenten
eines Speicherkontos zu
simulieren .
6. Speicherkontenverwaltung: In diesem
Dashboard können Sie also sehen , dass mehrere Optionen
, die wir möglicherweise nicht
aktiviert oder aktiviert haben und die wir wahrscheinlich später
deaktivieren wollten , hier geändert werden
können. Wenn ich also
die Standardzugriffsebene
von heiß auf kalt ändern möchte, könnte ich einfach darauf
klicken und das dann ändern. Bestimmte Dinge können nicht geändert werden,
oder Sie können einfach aufspringen und die Leistung
von Standard oder Premium ändern. Sie könnten jedoch
einige andere Optionen ändern. Also entschied er später, oder die Organisation entschied, dass sie große Dateien zulassen muss. Und Sie werden hier sehen
, dass es eine
schnelle Speicherung von bis zu 100 KB unterstützt . Du könntest weitermachen und das tun. Könnte diese
Aktienkurse hier auch ändern, aber wir lassen es vorerst heiß. Später können wir die Ressource entweder
entfernen oder sie auf eine coole Stufe herabsetzen. Zurück in unserem Übersichtsbereich sehen
wir, dass wir die Möglichkeit haben, es in einem Explorer
zu öffnen. Wenn wir auf Open Explorer klicken, werden
Sie sehen, dass
Sie es herunterladen
können, Sie Ihre Dateien und Container und alles andere
von
Ihrem Computer aus verwalten können. Wir können auch einen
Speicherbrowser verwenden. Wir können also auf den
Speicherbrowser klicken und
dadurch gelangen wir zu ausreichend
ähnlichen Oberfläche die uns die
Anzahl der Container,
Dateifreigaben, Tabellen und
Warteschlangen im System
anzeigt . Wir können auch weitermachen und mit diesen Komponenten
unterbrechen. Also kann ich hier
einen neuen Container erstellen. Und ich nenne diesen Container. Ist natürlich Container. Ich kann die
Zugriffsebene festlegen, ob sie privat sein soll, damit niemand sonst darauf zugreifen
soll, oder Blob
für Lesezugriff
nur für Blobs oder Container mit
anonymem Leseschreibzugriff
für Continuous und Blobs. Lass das jetzt privat. Und im Voraus kann ich
den Verschlüsselungsumfang und die
Unveränderbarkeitsunterstützung festlegen . Ich mache einfach weiter
und klicke auf Erstellen. Sobald dieser Blob oder dieser Container
erstellt wurde , kann
ich zum
Container gehen und dann ein Verzeichnis
hinzufügen oder eine Datei hochladen. Denken Sie jetzt daran, dass der
Container
der Ort ist, an dem die Dateien wirklich abgelegt werden,
und er versucht,
Ihnen diese hierarchische
Ansicht der Dateien zu geben und Ordner oder
Verzeichnisse
ohne Anführungszeichen zu zitieren, wenn Sie müssen. Also kann ich ein Verzeichnis hinzufügen und
ich nenne es neues Verzeichnis. Du, ist es ein grober Baum? Da haben wir es. Dann kann
ich in diesem
provisorischen Verzeichnis tatsächlich
alle Verzeichnisse zusammenfügen, kann
ich in diesem
provisorischen Verzeichnis tatsächlich
alle Verzeichnisse zusammenfügen wenn ich
will, oder ich kann einfach hochladen. Beim Hochladen kann
ich also wählen, ob ich sie überschreiben möchte, ob sie bereits existieren Ich kann Dateien per Drag & Drop ziehen
oder nach Dateien suchen. Und wenn ich dann auf „Erweitert“
schaue, kann
ich die Art des
Blobs auswählen, den ich hochlade. Es gibt also einen Block Blob, Page Blob oder Append Blob. Ich ändere das generell nicht , weil ich wirklich nur Blockblobs
hochlade. Oder Sie können
die Blockgröße wählen , wenn Sie
auf Stereotypen zugreifen möchten. Wenn es also heiß, cool oder archiviert und wir einen Ordner hochladen können, können
wir verschiedene Dinge tun. Also mache ich einfach einen einfachen Upload. Und ich lade gerade ein zufälliges PDF hoch, das ich auf meinem Computer
gefunden habe. Nichts allzu Ausgefallenes.
Und da haben wir es. Ich habe gerade meine erste
Blob-Datei hochgeladen und sie ist Hot Access. Natürlich kann ich
weitermachen und es bearbeiten. Ich kann eine URL abrufen, ich kann ein SAS-Token generieren. Und wir werden
uns all
diese ansehen und was sie bedeuten. Und ich kann sogar löschen. Denken Sie jetzt daran, dass
dadurch das sanfte Löschen aktiviert wurde. Wenn ich das lösche, kann
ich tatsächlich zurückgehen und
aktive und gelöschte
Blobs anzeigen und das
bringt alles zurück
, was ich gelöscht habe. Es wird mir zeigen und
es hat mir
gezeigt , wie lange
es aufbewahrt wird. Und dann rate mal was? Ich kann es tatsächlich ON löschen. Wenn ich mit der rechten Maustaste klicke, kann ich auf Löschen klicken und es wird wiederhergestellt. Das ist also eine nette kleine
Ausfallsicherheit für den Fall wir versehentlich Dateien
entfernen. Nein, denken Sie daran, dass Fast Shares etwas mehr
Zeit in der Einrichtung
erfordert, aber es ist eine
hervorragende Möglichkeit, File Share von
Ihrem lokalen Computer oder der Fascia
Ihrer Organisation von
den lokalen Servern zu verschieben File Share von
Ihrem lokalen Computer oder Fascia
Ihrer Organisation von und in die Cloud zu
stellen. Dies ist besonders
nützlich für Länder, die einen verteilten
Zugriff auf dieselben Dateien
benötigen. Ordnung, wenn Sie also
einen privaten Dateiaustausch für
unser verteiltes Setup mit
vorhandenen Redundanzen wünschen In Ordnung, wenn Sie also
einen privaten Dateiaustausch für
unser verteiltes Setup mit
vorhandenen Redundanzen wünschen, ist
dies eine hervorragende
Option für Sie. Gehen wir zu den Hinweisen über. Obwohl. Ich habe eine neue Warteschlange hinzugefügt und nenne
das hier ein Pferd. F: Lassen Sie uns weitermachen und auf Okay klicken. Dann siehst du
den Hauptteil der URL. Wir werden uns also bewegen, wenn wir mit der Entwicklung beginnen, uns die URL für unseren Blob-Container und
die Blobs und alles andere anzusehen. Aber im Moment machen wir nur einen Überblick über das
Speicherkonto. Von dieser Warteschleifen-URL aus kann
ich diesen Skew also abonnieren und Nachrichten
in die Warteschlange stellen. Ich kann jetzt Nachrichten
aus der Warteschlange lesen und wir sagen, Nachricht ist, was
genau meinen wir? Wenn ich die Warteschlange auswähle, kann
ich auf Nachricht hinzufügen klicken. Also, wenn ich eine Nachricht hinzufüge
und sage, dass dies
eine zufällige Testnachricht ist . Und ich kann die
Zeitspanne festlegen, sie sollte ablaufen. also nach sieben Tagen Wenn diese Nachricht also nach sieben Tagen nicht
verarbeitet wird, entfernen Sie sie. Natürlich werden sich
Ihre Bedürfnisse auch hier unterscheiden, sodass Sie den auswählen,
der Ihren Bedürfnissen entspricht . Sie könnten auch sehen, dass die
Nachricht immer abgelaufen ist. Sobald eine Nachricht
also unter Q
entspricht, löschen Sie sie
niemals, bis
sie verarbeitet wurde. In Ordnung? Und dann würdest du Encodieren sagen, das würden
wir tun wollen. Ich klicke. Okay. Wenn ich also auf Okay klicke, haben
wir jetzt eine
Nachricht in dieser Warteschlange. Und wieder einmal, wenn
wir Nachrichten sagen, sprechen
wir von Daten
, die verarbeitet werden müssen. Diese Nachricht
ist also, wie Sie sehen können, wirklich nur Text. Und ich habe versehentlich
dieselbe Nachricht zweimal hinzugefügt. Es dauert wirklich nur, okay, das heißt, das
könnte ein Satz sein. Es könnte ein Hort sein. Es könnte sich sogar um ein JSON-Objekt
handeln, was eine sehr beliebte Methode ist Daten wie
Datenkörper auf Hinweise zu
transportieren. Was hier also passieren könnte,
ist, dass Sie einen Block von JSON- oder JSON-Objekten als Sticks senden
könnten einen Block von JSON- oder JSON-Objekten . Und dann können Sie
einen Drittanbieterdienst oder einen
anderen Dienst verwenden einen Drittanbieterdienst oder , um diese JSON-Nachricht tatsächlich zu
verarbeiten
, in
der alle für einen Vorgang
erforderlichen Informationen zur Verfügung stehen. Verschiedene Dinge und verschiedene
Möglichkeiten, wie Sie Hinweise verwenden könnten. Auch hier besteht der
Hauptnutzen von Warteschlangen
darin, Prozesse auszulagern , die zu Verzögerungen bei
der tatsächlichen Anwendungslaufzeit führen können . Es ist also schneller,
das E-Mail-Beispiel erneut zu verwenden, es ist schneller, den E-Mail-Text zu übergeben
, dieses JSON-Objekt mit
den
E-Mail-Adressen des Absenders an die Empfänger hätte sein können und dann der Nachrichtentext
und alles andere es
hatte, in die Warteschlange gestellt
und dann
mit der Anwendung fortgefahren werden kann. Und dann wird
diese Nachricht im Hintergrund irgendwann aus der
Warteschlange genommen und gesendet. Wenn ich ventral sage,
meine ich, es könnte passieren. Sehen Sie sich die gleiche Zeit an, es
kann 20 E-Mails
später passieren , wenn Sie Hunderte von
Benutzern haben , die E-Mails
im System versenden, Sie möchten nicht, dass Hunderte von Benutzern und der eine auf das System
warten. Im weiteren Verlauf dieses Kurses
werden wir uns einige Beispiele
auf verschiedene
Arten ansehen . Das ist alles, was wir der Warteschlange hinzufügen
. Und natürlich können
wir die Warteschlange leeren und wir können auch eine Nachricht senden. Also könnte ich auf diese
Nachricht klicken und dq sagen. Jetzt
wären die nächsten Tische. Table Storage
ist wieder einmal ein schemaloses Design. Also kann ich auf
Tabelle hinzufügen klicken und ihr einen Namen geben. Und wo auch immer Sie sehen,
dass
ich keine Bindestriche verwende, weil bestimmte Dienste
strengere
Namenskonventionen haben und andere, sodass
einige von ihnen Bindestriche
zulassen, andere nicht. Sie werden es
also im Laufe der Zeit herausfinden. Es wird
Sie immer informieren, wenn Sie die
Namenskonvention verstoßen. Aber wenn ich auf Okay klicke
, wird eine neue Tabelle erstellt. Und dann erhalten wir wieder eine URL für diese
Tabelle, über die wir das Eingeben
und Lesen von Daten aus der Tabelle
abonnieren können . Und wenn ich dann auf
die Ressource selbst klicke, haben
wir ein sehr ähnliches Layout
wie bei der
Verwendung von Azure Cosmos DB. Wir haben Partitionsschlüssel, wir haben Zeilenschlüssel und es wird einen Zeitstempel haben. Wenn ich also auf Entität hinzufügen
klicke,
habe ich im Grunde die Möglichkeit, einen
Partitionsschlüssel und einen Zeilenschlüssel
anzugeben, und ich kann entsprechend andere
Eigenschaften hinzufügen. In Ordnung, also lass uns weitermachen
und eine neue Entität hinzufügen. Lassen Sie uns nun sagen, dass ich einige Lebensmittel lagern wollte
. Und was ich
hier tun werde, ist nachzusehen, dass der Partitionsschlüssel die
Kategorie des Produkts ist. Also, wenn ich
etwas lagere, das Molkereiprodukte ist
und dann, sagen wir, die Eigenschaft
Nummer eins ist der Preis. Und dann kann ich den Datentyp
wählen. Der Preis wäre also doppelt so hoch. Nehmen wir an, es kostet 2,50$. Und dann
wäre der nächste der Name des Artikels. Ich weiß nicht, warum ich die
Presse vor den Namen stelle, aber sagen wir einfach
, das ist Milch. Und dann einfügen. Jetzt hätte ich einen neuen Zeilenschlüssel
generieren können. Ich hätte sagen können, dass ein Bogen eine GUID verwendet
hätte. Ich habe es absichtlich leer gelassen, aber ich zeige Ihnen nur
die Punkte, an denen wir unseren
Partitionsschlüssel und Zeilenschlüssel
eingeben können , aber dann können wir so viele
andere Spalten eingeben und
Spaltenwert-Peers sind Schlüsselwertpaare Schlüsselattribute, wie wir
benötigen und wie gesagt, Ihre Bedürfnisse wachsen. Also nochmal die Daten, damit ich eine weitere Entität hinzufügen
kann,
bei der ich vielleicht später festgestellt habe,
dass ich mehr Immobilien als
nur Preis und Namen
speichern muss , oder? Also, wenn es
diesmal sagen wir Heftklammer wäre, und dann geben wir ihm diesmal einen
Zeilenschlüssel. Und dann ist der Preis zehn. Sagen wir einfach, der
Name ist Brot. Und was
bräuchten wir noch, um das zu lagern? Vielleicht möchte ich, dass es tatsächlich
in eine Kategorie eingeordnet wird. Auch das ist ein Grundnahrungsmittel. Vielleicht das Verfallsdatum. Ich denke mir nur
die Sachen richtig aus. Denn auch hier werden sich
Ihre Bedürfnisse unterscheiden. Das Verfallsdatum hat
die Uhrzeit, oder? Sie wählen also den entsprechenden
Datenwert und dann
gebe ich ein Ablaufdatum ein und ich lösche einfach
das letzte. Nehmen wir an,
das war ein neuer Look. Wenn unser Bedarf steigt, wird
die Anzahl der Spalten, die wir einfügen
können, zunehmen R kann mit sehr
geringen Auswirkungen zunehmen. Und das ist der Punkt, an dem kein
Sequel-Aspekt entsteht. Es sieht also immer noch relational aus, aber wir haben immer noch den Vorteil
dieses Schemallistendesigns. Damit ist unser
Rundgang durch unser Speicherkonto abgeschlossen. Wenn wir zurückkommen, werden wir uns damit
befassen, wie wir Lösungen entwickeln können , die mit diesen
verschiedenen Komponenten
interagieren.
7. Storage Explorer: Wenn Sie sich jetzt für
den Storage Explorer entscheiden, erhalten
Sie diese Visual
Studio-Code-Slash-Grafiken,
tut mir leid, so wie Sie es von Data
Studio gewohnt sind. Zuallererst möchten
Sie vielleicht
unsere Kegel verwalten und sich entsprechend
authentifizieren. Und sobald Sie authentifiziert sind, können
Sie sich Ihr Lager oder
Ihre Kegel genauer ansehen. Sobald Sie Ihre Authentifizierung
geklärt haben, können
Sie auf
die verschiedenen Teile zugreifen. Also hier ist das Speicherkonto
, das wir zuvor erstellt haben. Und noch einmal, wir
können uns
das genauer ansehen und uns
verschiedene Dateifreigaben, die Hinweise, die Tabellen, all die Ressourcen ansehen, die
wir uns zuvor angesehen haben. Möglicherweise sehen Sie sogar einige andere
, die Sie
im Browser-Explorer nicht gesehen haben. Also kannst du weitermachen und das tun. Und alle
Optionen, die Sie
im Browser hatten , sind auch hier
verfügbar. Sie können also Ihre Dateien,
Ihre Blobs, Ihre Ordner,
alles hier
verwalten . Und das ist noch besser für die
Machine-zu-Machine-Verwaltung des Blob Storage. Ich denke also, dass es eine sehr gute Idee
ist,
den Storage Explorer zu bekommen . Und es macht die Verwaltung
Ihres Speichers von Cones viel einfacher,
als jedes Mal zum
Browser gehen zu müssen.
8. Übersicht über Webanwendungen: Jetzt werden wir eine
Web-App entwickeln, in der Sie die verschiedenen Komponenten verwenden ,
die uns der Speicher oder die Kegel
zur Verfügung stellen. Unsere Idee für ein Webprojekt
war es also , ein Anmeldeformular
für Konferenzteilnehmer auszuhändigen. Wir werden asp.net, MVC verwenden. Dieses Mal haben
wir die Razor-Seiten benutzt, du hast Blazer benutzt,
wir werden MVC verwenden. Aber auch hier, sobald
es Dotnet Core ist, werden
die Konzepte übertragbar
sein. wissen, was wir tun werden,
ist Azure Table Storage zu verwenden, um das Register zu speichern,
und auf Senden zu klicken. Wir werden diese
Daten in diesem Tabellenspeicher speichern. Wir werden
ihnen erlauben, ein Bild hochzuladen. Für diesen Bild-Upload
verwenden wir den Azure Blob Storage. Okay, normalerweise
würdest du es also lokal speichern, aber wir wollen nicht, dass es
lokal auf dem Server gespeichert wird. Wir werden
das als Ihren Blob-Speicher auslagern. Wir werden
Azure Queue Storage verwenden , weil wir eine E-Mail
versenden möchten. Also habe ich dieses
Beispiel früher in
diesem Abschnitt des Kurses verwendet . Senden einer E-Mail erfordert
die Aktualisierung, um
das einzufrieren, das zu erledigen und dann weiterzumachen. Also geben wir es einfach
an die Warteschlange weiter. Und dann erstellen wir eine Konsolen-App, die einen Client
simuliert, der die Warteschlange
liest und dann die Nachricht oder die E-Mail-Daten aus
der
Warteschlange für den Versand
verarbeitet . Also werden wir all diese Dinge tun,
die uns bevorstehen.
9. Erstellen und Einrichten . NET Core Project: Mit derselben
Lösung, die wir für den
gesamten Kurs verwendet
haben, wollte
ich also für den
gesamten Kurs verwendet
haben, ein neues Projekt erstellen. Das ist natürlich optional. Wenn Sie jede Lösung in
eine eigene Lösung aufteilen
möchten, können Sie fortfahren. Und wieder
verwende ich Visual Studio. Sie können auch mitmachen, wenn Sie Visual Studio Code verwenden. Also mach weiter und
erstelle ein neues Projekt. Und dieses Mal werde
ich eine MVC-Web-App verwenden. Also gebe ich bei der Suche einfach die Buchstaben MVC und wähle dann ASP Core Web up with Model View Controller. Als Nächstes nenne ich dieses eine MVC Storage
Account Demo. Als Nächstes kann alles als Standard
beibehalten werden. Und dann erstellen wir, wenn Sie die
Terminologie für
Visual Studio unter
Linux oder Mac OS verwenden , können
Sie
zu Ihrem gewünschten Verzeichnis navigieren. Und dann kannst du
Dotnet sagen, neues MVC. Und dann können Sie es in
ein Verzeichnis mit dem
Namen des Projekts ausgeben . Und dann können Sie
weitermachen und die Eingabetaste drücken. Nun, da das Projekt erstellt
wurde, lassen Sie uns fortfahren und einige
der Bibliotheken hinzufügen , mit denen
wir arbeiten müssen. Und natürlich kennen wir die verschiedenen Möglichkeiten, wie
wir Bibliotheken hinzufügen können. Aber ich werde nur die Terminals
verwenden, da das Terminal für alle
funktioniert, egal ob Sie in Visual
Studio oder Visual Studio Code sind. Also werde ich sagen, dotnet füge
Pakete hinzu oder füge lieber Paket hinzu. Und dann
ist das erste
Paket, das wir hinzufügen , Azure Storage Blobs. Also können wir einfach die Eingabetaste drücken. Ordnung, und sobald
das erfolgreich eingefügt wurde, lösche ich einfach den Bildschirm. Und dann fügen wir dieses Mal eine Nullpunkt-Speicherwarteschlange hinzu. Und dann fügen
wir schließlich eine Nullpunkt-Datenpunkttabelle hinzu. In Ordnung, also dotnet füge das Paket
als deine Datenpunkttabellen hinzu. Nachdem wir
all diese Einstellungen vorgenommen haben, wir fortfahren und unsere
Speicherverbindungszeichenfolge,
Speicher- oder
Doppelpunkt-Verbindungszeichenfolge hinzufügen . Ich gehe einfach rüber zu den App-Einstellungen, Jason, lass es mich verstecken, das Terminal, damit wir
etwas mehr Platz bekommen. Und ich nenne einfach
diese Speicherverbindungszeichenfolge. Und dann wird der Wert für unsere Speicherverbindungszeichenfolge von unserem Portal kommen. Also lasst uns
zu unserem Portal springen. Und dann sind wir runtergesprungen
, bis die Zugriffstasten bluten. Und dann
wählen wir die Verbindungszeichenfolge aus. Also zeige ich einfach In die Zwischenablage
kopieren
, gehe zurück zu unserem Code und dann können wir das einfügen. Im. Da haben wir es. Meine Zwischenablage war also noch
nicht primär. Das ist also unsere
Verbindungszeichenfolge. Und ich werde einen neuen Ordner
erstellen. Und dieser neue Ordner
wird
unser Datenmodell für
die Speichertabellen speichern . Also nenne ich es einfach Daten. Gemäß unserer bereits etablierten
Namenskonvention werden
wir eine neue Klasse hinzufügen. Und ich
rufe einfach diesen einen Teilnehmer an. Beachten Sie, dass wir
die IT-Entitätsschnittstelle implementieren
müssen, da
wir Table Storage verwenden werden implementieren
müssen, da
wir . Die Teilnehmer werden also von Anfang an von einer Tabellenentität erben . Und das kommt zu uns aus
unserer Klasse für Datentabellen. Und dann kann
ich mithilfe von Kontrollpunkten die Schnittstelle implementieren. Das gibt uns jetzt diese
spezifischen Spalten, oder? Denken Sie daran, dass diese
Spalten da waren bevor wir mit dem Hinzufügen
weiterer Attribute begonnen haben. In Ordnung, also
kann ich das natürlich einfach aufräumen und sie B holen lassen, das ich
bekomme und das Set, fertig. Und entfernen Sie all diese durch neue
Throwns-implementierte Ausnahmen. Ordnung, also nachdem
wir das bereinigt haben, lassen Sie uns fortfahren und
unsere eigenen Eigenschaften hinzufügen. Also das hilft mir hier draußen. Ich habe also einen Namen und ich
würde wahrscheinlich den
FirstName
vom Nachnamen trennen wollen . Und geben wir
eine E-Mail-Adresse ein. Und was würden Sie sonst noch
brauchen, um den Teilnehmer anzulocken? Lassen Sie uns vorerst damit arbeiten. Als unsere Anforderungen bedeutet
CMS also, mehr zu setzen. Aber fangen wir damit an.
10. Table Storage Service hinzufügen: Lassen Sie uns nun unseren
Table Storage Service konfigurieren. Also
erstelle ich einen neuen Ordner und nenne
diesen Dienst. Und hier werde
ich eine neue Klasse erstellen. Und diese Klasse wird Table Storage Service
heißen. Und während ich hier bin, werde
ich hier nur eine
kurze Anpassung vornehmen. Ich denke, ich werde
das nur ein wenig qualifizieren und es als Teilnehmereinheit bezeichnen. Nur damit es nicht
nur diese zehn Tage sind. Das sind nur meine
kleinen Anpassungen. Wenn du das Bedürfnis verspürst,
es auch zu schaffen, dann tu es. Ich benenne es einfach hier um und
benenne die Datei um, um
die Entitäts-Seele für
unsere Methoden hier zu betreuen , ich werde es haben, und ich werde
einfach der Öffentlichkeit schreiben. Entschuldigung, ich werde
zuerst
alle Methodennamen schreiben und dann
füllen wir die Lücken aus. Also habe ich mir eine Aufgabe gestellt, bei der die Entität des
Teilnehmers zurückgegeben
wird. Und diese Aufgabe wird Get Attendee heißen. In Ordnung? Und es wird eine
ID-String-ID benötigen, weil ich vorhabe, Waren für die
ID zu verwenden. Gute Werte. Wir werden also dafür sorgen, dass gute
Teilnehmer an Teilnehmer kommen, was
einen alten Parameter übernimmt. Und dann wird eine
Liste der Teilnehmerentitäten zurückgegeben. Und dann zwei weitere Methoden, eine zum Upsert und eine zum Löschen. Zwischen diesen Methoden
haben wir also die volle Crud-Funktionalität. Ich werde das einfach in eine Schnittstelle extrahieren,
damit wir
diese Abstraktion
und diese Vererbung haben. Da haben wir es. Jetzt können wir damit beginnen, das zu
verkabeln. Also werde ich zweimal
einen Konstruktor CT OR
und Tab erstellen und
diesen Konstruktor degenerieren. Und ich werde mein
Symbolkonfigurationsobjekt in
diesen Dienst einfügen , damit
wir auf diese Konfigurationsdatei
und die darin enthaltenen Werte zugreifen können . Lassen Sie mich das einfach umbenennen. Ich werde auch
eine private, sagen
wir konstante Zeichenfolge
für unseren Tabellennamen haben. Und ich
rufe diese Teilnehmer einfach an. Ordnung, so werden
wir
den Tisch in unserem Tabellenspeicher nennen . Und wir haben die Konfiguration. Jetzt brauche ich einen Kunden. Ordnung, also werde
ich eine Methode erstellen, ich werde sie hier unten zu einer privaten
Methode machen. Also eine private Aufgabe,
die ein Tabellenclient-Objekt zurückgibt. In Ordnung? Und natürlich fügen
Sie im Laufe der Zeit die fehlenden
Benutzungsanweisungen hinzu. Wir sagen
Get Table Client. Und dieser Kunde wird
zuerst einen Kunden definieren, ich rufe nur Client an. Dieser Client
wird der neuen Tabelle entsprechen. Nun, eigentlich
ist das ein Service-Kunde. Entschuldigung, ich benenne
das in Service Client um. Das ist also ein neuer
Tabellenservice-Client. Da haben wir es. Dann übergeben wir
diesen Konfigurationswert für unsere Verbindungszeichenfolge. Und falls Sie sich
nicht an den Schlüssel erinnern, können
Sie jederzeit hierher
zurückkehren. Ich kann mich nicht erinnern, wie oft es hierher
gesprungen ist, um es zu holen. Und das werden
wir für den
Konfigurationsschlüsselwert
verwenden. Ordnung, jetzt, wo wir den Service-Client
haben, speichern
wir
unseren Tisch, der Client wird den Servicekunden gleichgestellt
sein. Punkte rufen Tabelle,
Tabellenclient über den Tabellennamen ab. Der Tabellenname ist derselbe Wert, den
wir hier oben gespeichert haben. Also können wir das machen. Dann
warten wir auf unsere Kunden, um zu erstellen, falls es sie nicht gibt. Also sieh dir diese Null an. Wenn die Tabelle nicht existiert wenn wir versuchen, mit unserem
Speicherkonto zu kommunizieren, haben
wir die Möglichkeit, sie einfach zu
erstellen, falls sie nicht existiert. Also das kann ich mir einfach aussuchen. Und natürlich wähle ich die asynchrone Option und dann können wir
den Tabellenclient zurückgeben. Wenn die Tabelle also nicht existiert, erstellt sie sie und stellt eine Verbindung zu ihr her. Und dann verkörpert unser Kunde jetzt
dieses Verbindungsobjekt. Lassen Sie uns also herausfinden, was wir
alles tun. Holen Sie sich den Teilnehmer anhand des Ausweises. Jetzt müssen wir uns instabile Client-Instanz
besorgen, und dann machen wir
weiter und hole ich mir Entity Sync? Weißt du, es sieht einfach so aus. Und wenn wir warten, dann muss das
Methyl
natürlich asynchron sein. Der Var Table Client
ist also gleich zwei. Wir würden den Tabellenclient bitten,
die Methode zu wählen, die wir gerade entwickelt haben. Und dann hat die zweite Zeile, die
Sie bemerken, einen Fehler. Also wird die Entität synchronisiert
und alle geben die
ID ein und wir haben einen Fehler. Warum haben wir einen Fehler? Weil es
einen Partitionsschlüssel benötigt. In Ordnung? Wir müssen also
einen Partitionsschlüssel
und einen Zeilenschlüssel angeben ,
um die Entität zu erhalten. Die Teilnehmerentität hat hier also
keinen Partitionsschlüsselwert, oder? Ich meine, ja, wir haben das eingebaute Feld
für einen Partitionsschlüssel, aber wir haben kein
dediziertes Feld , das als
unser Partitionsschlüssel dient. Als Teil eines guten Designs würden
wir
ihm also tatsächlich eine weitere Immobilie geben. Und lassen Sie uns sehen, dass
jeder Teilnehmer
unserer Konferenz zum unserer Konferenz Beispiel in einer bestimmten
Branche
professionell ist. Was wir
hier also tun können, ist Industrie zu sagen, wir nennen es einfach den Namen der Branche
, in der Sie tätig sind, egal ob es sich um IT,
Bildung usw. handelt. Und dann kann die Industrie hier
unser Partitionsschlüssel sein , um alle Teilnehmer
nach Branche darin zu unterteilen. Es macht Sinn, oder? Wenn Sie also Ihre
Anwendung für Ihren Zweck erstellen, Sie immer
sicherstellen, dass Sie die bestmöglichen Entscheidungen für Ihre Designbranche
treffen, hier sind unsere Partitionsschlüssel. Also zurück zu unserer Methode und
was ich tun werde, ist, dass wir String
Industry und String ID übergeben. Und dann geben
wir die Branche und den Ausweis weiter, um den Teilnehmer
abzuholen. Für die nächste Methode, die darin besteht, Teilnehmer zu holen. Wir beginnen natürlich
mit dem Tabellenclient und dann werden wir hier
ein bisschen andere
Codeteile machen . Also sage ich Seitentabelle. Ich neige dazu, dass das Entitätsobjekt namens Attendee
Entities der Tabelle Client
Punkt Query Attendee Entity entspricht. Und dann können wir die D2-Liste der
Teilnehmerentitäten zurückgeben, und dann wird dieser Rückgabetyp
erfüllt. Schauen wir uns jetzt unser Absurdes an. Wie immer beginnen wir mit unserem Kundenobjekt „Fishing Off“ oder „
Table“. Und wenn wir warten, muss
die Methode eine Spüle sein. Und dann werden wir einfach
weitermachen und auf die Punkte
unserer Tischkunden warten . Lass mich das nochmal versuchen. Also oh, es tut mir leid. Das ist asynchron. Warte auf den Tischkunden. Da haben wir es. Entität nicht asynchron aktualisieren. Wir machen einfach
weiter und geben
ihm die Teilnehmer-Entität. Wir haben also bereits
Werke von Hold Upsert gesehen, als wir Azure Cosmos
gemacht haben Azure Cosmos
gemacht falls Sie damit nicht so
vertraut sind. Absurd ist im Grunde
ein Portmanteau oder eine Kombination der
Wörter aktualisieren und einfügen. Wenn die Entität also auf der Grundlage der bereitgestellten
Informationen
existiert, insbesondere mit dem
Schlüssel und dem Partitionsschlüssel, ersetzt sie einfach die Details. Wenn es nicht existiert,
wird der neue Datensatz erstellt. Ordnung, das ist also diese
ganze Verbesserung, die
für den Teilnehmer funktioniert oder ihn löscht. Natürlich machen wir es asynchron. Wir fahren fort und holen
unseren Tischkunden ab. Und wir werden einfach weitermachen
und warten auf Tisch Client Dot Delete ein Waschbecken. Und was ich
für diesen nicht getan habe, ist die
Parameter bereitzustellen , die wir zum
asynchronen Löschen benötigen. Für das asynchrone Löschen müssen
wir also den Partitionsschlüssel und
die Zeilenschlüsselwerte übergeben . Und das sind die Werte, die wir in unseren Löschvorgang
übergeben. Wenn Sie sich nun einmal
nicht sicher sind, was Sie weitergeben sollten, können
Sie sich
jederzeit die Overlords
der Methoden ansehen , und das wird
Ihnen helfen, Hinweise zu erhalten. Also mach weiter und übergib die Parameter und das
sollte delete entity a sink sein. Ich entschuldige mich dafür, dass Sie nicht async löschen, sondern die Entität asynchron löschen. Async hätte die Tabelle
löschen können. In Ordnung, also delete entity wird diese beiden Parameter
übernehmen. Jetzt haben wir unseren Service für
unseren Table Storage erstellt. Wir haben hier eine leichte Anpassung
an unserem Unternehmen vorgenommen. Und natürlich
müssen wir unseren Vertrag, der
die Schnittstelle ist, aktualisieren , weil ich die
Signatur für diese Methode geändert habe. Also springe ich einfach
dorthin und ändere das Löschen so, dass
die beiden Parameter
wie erwartet übernommen werden. Und damit es Teilnehmer bekommt, müssen
wir es auch damit
aktualisieren. In Ordnung? Sobald also der Vertrag zufrieden ist, ist der Service zufrieden. Und wir haben keine
Konflikte und Aufzeichnungen. Und dann müssen
wir das wie immer registrieren. Also springe ich einfach
zu unserer program.cs und sehe
einen Builder-Punkt. Lass mich das nochmal versuchen. Builder Dots Services. Punkte fügen einen Bereichsdienst für den vom
Table Storage
Service implementierten IT-Dienst hinzu. Und das war's.
Wenn wir also zurückkommen, werden
wir den Controller
und die entsprechenden
Ansichten erstellen, die es uns dann ermöglichen
, den Registrierungsprozess zu vereinfachen.
11. Controller und Ansichten erstellen: Lassen Sie uns nun unseren Controller erstellen. Wir gehen direkt
zu unserem
Controller-Ordner , wählen Sie Controller aus und machen einfach
einen MVC-Controller mit Readwrite-Aktionen. Klicken Sie auf Hinzufügen und lassen
Sie uns das erreichen nennen. Dieser Controller für die
Teilnehmerregistrierung muss natürlich angehängt werden. Und da haben wir sie, die Teilnehmerin, ihre Dissertation über Controller. Lassen Sie uns unseren IT-Service integrieren. Also ich Table Storage, I Table Storage Service. Stimmt es? Und wir können
weitermachen und dies als privates
schreibgeschütztes Feld initialisieren. In Ordnung? Und jetzt können wir
mit unseren Aktionen beginnen. Im Allgemeinen sollten
Sie
Ansichtsmodelle verwenden, um zu verwalten, was auf der Vorderseite und
anders als im Backend
passiert. Aber noch einmal, dies
ist eine kurze Demo, also entschuldigen Sie den Mangel an Best Practices und
Abstraktionen wir machen
nur eine einfache Demo,
um die Konnektivität zu zeigen. Anschließend können Sie
alle Best Practices
und
Sorgenabgrenzungen für unsere Indexansicht zusammenstellen.
Als Erstes möchten
wir natürlich die Daten abrufen. Also ich möchte sagen, dass var
data dem
Underscore table storage
dot get attendees entspricht . Nun, das ist ein Synchron, auf den
ich warten muss. Und dann
konvertieren Sie diese Methode natürlich auch
in eine asynchrone
Methode. Dann kann ich diese
Daten an die Ansicht übergeben. Lassen Sie uns nun die Ansicht generieren. Klicken Sie also mit der rechten Maustaste auf das Wort
Ansicht und klicken Sie auf Ansicht hinzufügen. Und ich gehe einfach
zu Razor View. Und ich werde
eine Listenvorlage verwenden. Und die modale Klasse wird
die Entität des Teilnehmers sein. Und ich kann alles andere verlassen. Ich muss nicht auf
Skriptbibliotheken verweisen und dann auf Hinzufügen klicken. Und in kürzester Zeit wurde unsere
Indexansicht generiert. Von hier aus werde ich mir also nicht
die Mühe machen , das zu ändern, was
wir uns noch ansehen. Was ich ändern werde, ist dieser
Abschnitt, in dem wir die Primärschlüssel
übergeben , damit wir den Rollenzeilenschlüssel verwenden
können. Und natürlich brauchen wir
die Party-Chunky, also lassen Sie mich diese
entsprechend benennen. Wir benötigen also die ID und
den Partitionsschlüssel
, der Industries
heißen wird. Ich kann sagen,
dass industry dem item dot industry comma
entspricht und id dem Wert Rho KI entspricht. Ordnung, das müssen
wir also zu unserer Bearbeitung, zu unseren Details,
zu
unseren Löschmethoden
übergehen unserer Bearbeitung, zu unseren Details,
zu
unseren Löschmethoden
übergehen . Warum? Da all diese sowohl den
Partitionsschlüssel als auch den ID-Wert benötigen, weil wir
abrufen müssen, um zu bearbeiten, müssen
wir abrufen,
um uns die Details anzusehen. Und natürlich das Löschen, wir benötigen diese Daten auch. So
werden wir den Index machen. Gehen wir nun
zum nächsten über, das sind die Details. Und die Details würden einer ähnlichen Operation
folgen. Aber denken Sie daran, dass wir
hier die Int-ID und Wert
der
Zeichenkettenbranche verwenden. Und tatsächlich ist id eine Zeichenfolge, weil
wir ein Raster verwenden werden. Und wir müssen hier
einige Anpassungen vornehmen. Das muss also eine asynchrone Aufgabe
sein. Natürlich
hätte ich einfach
den IntelliSense verwenden können,
um das zu konvertieren. Lassen Sie mich also einfach die Methode
Async machen , um diese Eingabe zu überspringen. Und dann
bekommen wir keine Teilnehmer, aber wir bekommen unser Ten D, was nicht
erwarten wird, dass wir den Branchenwert
und den ID-Wert überschreiten. Also geben wir diese weiter und geben die
Ansicht mit den Daten zurück. Und dann können wir
diese Daten generieren, diese Ansicht. Und wir werden detaillieren, also verwenden wir die Detailvorlage für dieselbe Entität
und fügen das hinzu. Im Moment haben wir unsere
Detailansicht erstellt. Lassen Sie mich also alles schließen, was wir an dieser Stelle
nicht benötigen. Für Create können wir das
belassen, da wir keine Daten
im Voraus oder Louis benötigen. Schauen wir uns das an. Wenn wir möchten, dass sie
den Branchenwert bieten, könnten
wir ihnen theoretisch
eine Drop-down-Liste geben , die
theoretisch nicht auf Ihren Bedürfnissen basiert. Sie könnten ihnen
eine Dropdownliste geben ,
damit sie aus
einer ausgewählten kuratierten Liste von
Branchen auswählen können einer ausgewählten kuratierten Liste von
Branchen auswählen , die Sie als Partitionsschlüssel haben
möchten . Für diese einfache Demo werden
wir sie einfach eingeben. Aber natürlich möchten
Sie in
Zukunft, in Zukunft, vielleicht eine
kuratierte Liste haben, die Sie als Ihre Partei oder
mögliche
Partitionsschlüsselwerte
anerkennen , oder? Lassen wir also die Ansicht „
Erstellen“ in Ruhe. Nun, lassen Sie uns diese Ansicht generieren. Also klicke ich einfach mit der rechten Maustaste auf Ansicht
hinzufügen, Rasieransicht. Und dann verwenden wir unsere
Erstellungsvorlagen für dieselbe
Entität. Fahren Sie fort und fügen Sie hinzu. Nachdem die Creators
hinzugefügt wurden, ist
es Hinweis, dass es
nicht async heißt, wir brauchten nichts
Asynchrones in der Erstellung, aber wir müssen
einige asynchrone Dinge
innerhalb der Post-Methode tun . Bei der Post-Methode wird also von uns erwartet, dass
wir uns
wieder auf den Teilnehmer melden. Entitätsobjekt. Da haben wir es. Dann
werden wir es versuchen. Bevor wir also überhaupt zum Inneren
des Versuchs kommen, bevor wir den Service überhaupt anrufen, bevor wir den Service überhaupt anrufen, müssen
wir einige Daten eingeben. Also hier wollte ich sagen,
dass der Partitionsschlüssel, Partitionsschlüssel der
Teilnehmerentität,
gleich ist und dann ist das
die Teilnehmerentität. Punkte. Worauf haben wir uns geeinigt? Ich glaube, es war die Industrie. Das ist richtig. Und dann gebe ich den Zeilenschlüssel an
, also fügen wir den Zeilenschlüssel hinzu. Los geht's, wird Boyd dots entsprechen, neue GUID.
Zu schnüren. Diese beiden können wir
weitermachen und
unseren Table Storage Service
Punkt upsert Attendee anrufen und ihm das
Attendee Entity Object geben. Weil alle anderen
Felder
durch das Ausfüllen
des Create-Formulars festgelegt worden wären . Ich habe hier einen Fehler, weil die Konvertierung in
Async nicht abgeschlossen wurde. Also lasst uns weitermachen und uns treffen. Das ist eine Aufgabe und
dieser Fehler verschwindet. Jetzt können wir mit
den Änderungen fortfahren. Die Bearbeitung muss also einen
Abruf durchführen , der den Details ähnelt. Also können wir einfach
weitermachen und das tun. Und natürlich
müssen die Parameter ähnlich sein. Warum tippst du, wenn
du kopieren und einfügen kannst? Und danach, oh,
das muss asynchron sein, also lasst uns das konvertieren. Und dann,
nach der Operation, werden
wir tatsächlich etwas
Ähnliches tun wie beim Erstellen. Wir müssen also sicherstellen, dass wir einen
Partitionsschlüssel und einen Zeilenschlüssel
zurücksetzen. Und dann machen wir weiter und gehen absurd vor. Ordnung, Sie werden also
sehen, dass das
Erstellen und Bearbeiten im Grunde nach dem
gleichen Verfahren erfolgt, aber wir müssen mit OER etwas
vorsichtiger sein. Also werde ich einfach
all diese Parameter ändern und
es wird durchgehen und sicherstellen, dass alles so
funktioniert, wie wir es erwarten. Also
setzen wir erneut Maßstäbe in der Branche. Was sind die Branchen
, um der Partitionsschlüssel zu sein. Möchte ich aber einen
neuen Zeilenschlüssel haben? Ich würde keinen neuen Zeilenschlüssel
haben wollen. Also werde ich den entfernen , weil der
Zeilenschlüssel bereits in dieser Entität enthalten ist und wir ihn
im Formular
jederzeit verstecken können , oder? Also ich möchte
den Zeilenschlüssel erneut setzen, ich setze nur
den Partitionsschlüssel zurück, nur für den Fall, dass sich dieser Wert
bei der Bearbeitung geändert hat. Nun, ich muss das treffen, das ist
natürlich synchron. Da haben wir es. Wir können weitermachen. Nun zum Löschen, ich verzichte auf die
Notwendigkeit der Löschregistrierung. Ich werde die
Bestätigung zumindest vorerst löschen. Also werde ich die getMethod
entfernen und dann implementieren wir
die Post-Methode. Ich habe es
bereits in eine asynchrone Methode konvertiert und
die Zeichenketten-ID und die industriellen Parameter eingegeben, ähnlich
wie wir es für die Bearbeitung getan hatten. Und was wir tun, ist, ich warte, den Teilnehmer zu
löschen, nachdem er die
Branchen
- und ID-Werte erhalten hat. Was wir also im Index tun werden ist, dies von einem Link zu einer tatsächlichen Schaltfläche zum Absenden von
Formularen umzustrukturieren. Platziere das Forum einfach hier. Und was wir haben, ist
ein einfaches
Formular-Tag mit der ASB-Aktion Löschen, sodass die Post-Methode aufgerufen wird. Und dann haben wir zwei
Eingänge, beide als versteckt. Und der Wert hier wird passen. Und lassen Sie mich diese Korrektur vornehmen. eine sollte also Item
Dot Roll Key sein und das andere Item Dot
Industry, das ist Value. Und dann
entsprechen die Namen
natürlich den Parameternamen, die wir in unseren Axonparametern
skizziert haben . Und dann haben wir eine Eingabe
, bei der es sich um eine Schaltfläche zum Senden handelt, die einfach wie
eine Gefahrenschaltfläche aussieht. Also ich kann diesen Link kommentieren
, weil wir ihn nicht brauchen. So werden
wir also mit dem Löschen umgehen. Jetzt habe ich noch eine Sache, auf
die ich hinweisen möchte, und das ist ein kleiner Teil
unseres Refactorings und es ist eine
Art Kritik, die ich an Visual Studio habe und die Art und Weise, wie es Methoden
refraktiert, wenn
es sie als Spüle durchführt. Aber wenn ich dieses asynchrone
Schlüsselwort an das Ende anhänge, gefällt
mir der Geldbeutel nicht. Ebenfalls. Als ob Sie feststellen würden
, dass dies alles
asynchrone Methoden sind und ich habe nicht
gesagt, dass Teilnehmer asynchron sind. Wenn Sie also diese
Namenskonvention bei
Ihren Methoden beibehalten möchten , ist das in Ordnung. Es ist nicht etwas
, das ich unbedingt über meine
persönlichen Vorlieben hinaus
praktiziere. Mir ist aufgefallen, dass MVC die
Navigation
nicht gut handhabt , wenn Async zum Namen des Axons und
der Ansicht
hinzugefügt wird . Seien Sie also auf der sicheren Seite. Mein Vorschlag ist, wenn es in async umbenannt
wurde, entfernen Sie
einfach diese asynchrone Benennung. Das ist einer. Also mach das für alle Aktionen. Du wirst sehen, dass ich das
schon durchgemacht habe. Und all die, die
asynchron bearbeiten und asynchron indexieren
und alles. Es wurde
nur in den ursprünglichen Namen umbenannt ,
ohne dass Async angehängt wurde. Das ist eine, um
die Ansichten umzubenennen, oder? Alle diese Ansichten werden also
tatsächlich versuchen, zur asynchronen Version zu
wechseln , oder
sie werden async genannt. Sie können also einfach weitermachen und das asynchrone Schlüsselwort
entfernen. Ich klicke einfach darauf
und drücke F2 auf meiner Tastatur, um es dann umzubenennen. Und die Aktion innerhalb der
Formen, die es sind,
es sollte einfach
auf Bearbeiten gehen, oder? Das ist also nur eine kurze
Überarbeitung, die ich vorschlage, um sicherzustellen , dass wir keine Probleme haben. Ich habe mich nie wirklich
hingesetzt und gesagt:
Lass mich versuchen, die asynchrone
Namenskonvention zum Laufen zu bringen. Ich bevorzuge es einfach ohne, also habe ich
versucht, es zu vermeiden. Stimmt. Und wurden
schon einmal generiert. Wenn Sie
die Bestätigungsseite haben wollten, hätten
wir das Get so belassen die Ansicht entsprechend
generiert wurde. Das ist also das eigentliche
Formular, das ich gerade für
den Index verwendet habe, um sicherzustellen, dass wir einfach weitermachen und den Beitrag
löschen
können. Die letzte Aktivität
besteht darin, zu
unserem Layout überzugehen und unser Menü so zu
ändern, dass wir
die Option haben , zum Controller für die
Teilnehmerregistrierung zu wechseln, und es wird
zur Indexansicht gewechselt, und dann können Sie ihm einen Namen geben. Also habe ich einfach den
Datenschutzlink entfernt und ihn durch den Link zur
Teilnehmerregistrierung ersetzt. Wenn wir also zurückkommen,
können wir weitermachen und testen.
12. Testtabelle Storage CRUD: Ordnung, also ich führe die Anwendung aus und nur für den
Fall , dass Sie sich fragen,
wie sie ausgeführt wird. erneut sicher, dass
das neue Projekt
Ihr Startup-Projekt ist. Und dann können Sie
einfach ohne
Debuggen ausführen , wenn Sie es debuggen
möchten. Und mach auf jeden Fall weiter. Ich laufe also ohne
Debugging und
gehe einfach weiter und klicke auf
Teilnehmerregistrierung. Wir sehen also, dass unsere Indexseite
geladen wurde, wir haben keine Fehler. Das heißt, es ist mit unserem Lager oder unseren Kegeln verbunden
. Der Tisch sah, dass nichts
zurückgekommen ist und er zeigt uns leer. Das ist in Ordnung. Lassen Sie uns Neues kreieren. Wenn ich einen neuen
Testdatensatz erstelle, sagen wir,
testen, testen und testen auf ti.com
und industries IT, ich natürlich keinen Partitionsschlüssel, keinen Zeilenschlüssel
und keine Zeitstempel an, um Teile der Bereinigung
zu ersetzen, die auf unserer Benutzeroberfläche durchgeführt werden müsste. Aber das ist in Ordnung. Lass uns auf Erstellen klicken. Und hier sehen wir, dass es mit dem Rekord
zurückgekommen ist. Die Branche und
ich partitionieren also Schlüssel mit
den gleichen Werten und
wir haben einen neuen Good for oder 0-Schlüssel und einen
Zeitstempelwert. Wenn ich ins Detail gehe, sehen
wir alles darüber. Wir wissen also, dass der
Partitionsschlüssel Fetch One by ID Slash funktioniert. Wenn ich zu Bearbeiten gehe, versuchen
wir, hier
etwas zu ändern. Also das ist Test 123, und ich werde speichern, und das hat die Datei bearbeitet. In Ordnung. Lass uns das jetzt zur
Kenntnis nehmen oder so. Wenn ich noch einmal zu Edit gehe, habe ich die Branche
diesmal auf ITU eins-zwei-drei umgestellt oder lass uns etwas
Richtiges ausprobieren, oder? Also war es nicht, ES war Bildung. Und dann habe ich versucht,
Knoten zu speichern , sodass ich einen
völlig neuen Datensatz erhalte. Es ist derselbe Regelschlüssel, aber mit einem anderen Partitionsschlüssel. Damit musst du also sehr
vorsichtig sein. Weil wir angegeben haben, dass der Tabellenspeicher einen zusammengesetzten Schlüssel
verwendet. Es betrachtet sowohl den
Partitionsschlüssel als auch den Zeilenschlüssel. Abgesehen davon könnte Deshawn also mehrere Datensätze mit
demselben Sorry haben, wir können mehrere
Partitionen mit den Datensätzen mit
demselben ländlichen Schlüsselwert haben. Und genau das sehen
wir hier. Das ist eine andere
Partition und wir kommen hier mit dem
Zeilenschlüsselwert zurecht, oder? Also ging es einfach weiter und
schuf einen brandneuen Rekord. Damit müssen Sie also sehr vorsichtig
sein, wenn diesen
Partitionsschlüsselwert
verwalten. Und aus diesem Grund könnten
Sie wahrscheinlich einfach
die Zeilentaste für beide Parteien verwenden, Sean Andrew-Taste, um sicherzustellen dass es immer derselbe
Datensatz ist. Jetzt werde ich
weitermachen und löschen,
und ich mache mir nicht die Mühe
, die Ästhetik und so zu korrigieren . Das ist wirklich nur eine Demonstration mit
der Cloud-Integration,
nicht unbedingt, um
dem Stil zu entsprechen, oder? Also werde ich einfach
weitermachen und
das Löschen und Entfernen
eines dieser Datensätze testen . Und da haben wir es. Das Löschen hat funktioniert. Genau dort haben wir gerade
bestätigt, dass unsere Table Storage-Crowd funktioniert. wissen, was Sie
jetzt
zur weiteren Überlegung tun können , ist
Dinge wie das Erstellen und
Bearbeiten von Formularen zu bereinigen , sodass Sie den Zeilenschlüssel und den
Partitionsschlüssel für den
Zeitstempel nicht angezeigt werden müssen . Wir können diese
aus dem Create entfernen
und wir können sie
aus unserem Zeitstempel entfernen. Also lasst uns weitermachen
und das aufräumen. Dann müssen
wir diese Dinge für unsere Indexliste wahrscheinlich auch nicht
sehen. Ich muss also nicht
den Partitionsschlüssel sehen,
Zeile, Schlüssel, wahrscheinlich
Zeile Keegan, bleib. Aber da es dann
eher eine Idee ist, würde
ich es wahrscheinlich nach vorne
verschieben wollen. Und selbst dann,
willst du das Raster wirklich sehen? Jetzt? Lassen Sie uns das auch entfernen. Keiner dieser drei
Artikel existiert also auch hier. Also halten wir es einfach
schön sauber. Und genau dort haben wir gerade Credit
for Table Storage
eingeführt. Lassen Sie uns nun sehen, dass sich unsere
Anforderungen geändert haben. Und nein, wir müssen diesem Formular
irgendeine Form des
Datei-Uploads hinzufügen Formular
irgendeine Form des ,
da die Teilnehmer einen Avatar oder
ein Bild hochladen
müssen
, das wir sicher speichern und dann zur Anzeige
abrufen müssen. Jetzt schauen wir uns
an, wie wir
Blob storage.com oder
etwas Ähnliches nutzen können .
13. Blob Upload Service hinzufügen: In Ordnung, also haben sich unsere
Anforderungen geändert. Ich weiß, dass wir ein
hochgeladenes Bild für den Benutzer speichern müssen, aber wir möchten es aus verschiedenen Gründen nicht auf unseren Servern speichern. Was wir also tun werden
, ist , diese Verantwortung auf
einen Azure Blob Storage auszulagern. Also werde ich
dieser Tabellenentität ein neues Feld
hinzufügen und es Bildnamen nennen. Wir werden
es also umbenennen, sodass es den gleichen Wert
hat, den
der Zeilenschlüssel haben würde. Und es wird einfach
diesen Bildnamen hier speichern. Und dann wird das in Zukunft
als
Bezugspunkt dienen , wann immer wir auf den Blob verweisen
müssen. Lassen Sie uns nun einen neuen Dienst erstellen, und das habe ich bereits getan. Wir werden es
Blob Storage Service nennen. Also klicken Sie einfach mit der rechten Maustaste auf Dienste, fügen Sie eine neue Klasse hinzu und wir rufen
einen Blob Storage Service auf. Und in meinem Blob Storage Service habe
ich irgendwie Notizen geschrieben, ein Teil des Codes ist schon
jemand, der dich
durch den Code führt, sodass du mir nicht beim Tippen zuschauen
musst. Jetzt habe ich zunächst einen Konstruktor
erstellt, in den ich die Konfiguration
eingefügt habe. Also kannst du weitermachen und das tun. Ich habe auch ein Feld
namens Containername, das ich
Teilnehmerbilder nenne. Nun, der Grund, warum ich
ausschließlich Kleinbuchstaben verwende ,
ist dieser und ich habe bereits auf die
Namenskonventionen angespielt. Mit Blob of Storage können
Sie in Ihrem Knie keine
Großbuchstaben verwenden. Also alles, was du
benennst, musst du in Kleinbuchstaben benennen, du könntest einige
Sonderzeichen verwenden. Fußnote, ich behalte nur alles in Kleinbuchstaben der
Teilnehmerbilder. Und dann habe ich mein Methyl und das
wird zu
Container-Kunden führen. Jetzt können Sie
es
noch in diesen Truck packen , sodass Sie
jede Ausnahme erwischen können , insbesondere die Benennung
betrifft, denn was wir hier tun, ist, dass wir versuchen, einen Container zu
erstellen, einen Blob-Container-Client, um genau zu
sein, und
diese Verbindungszeichenfolge aus der
Konfiguration und
diesen Containernamen übergeben diese Verbindungszeichenfolge aus . Wenn Ihr Name nun
nicht übereinstimmt, haben
Sie
am Ende definitiv eine Ausnahme. Sie können also einfach versuchen,
catch zu finden und
hier einen Breakpoint zu setzen , damit Sie sehen können,
was die Ausnahme ist An diesem Punkt würden
Sie wahrscheinlich einen
400-Fehler erhalten. Nein, wir werden
weitermachen und sehen ein kreatives Gewicht NICHT existiert. Wenn es also versucht, dies zu tun, würde
es auf die Ausnahme stoßen. Und wenn es dann so weit kommt, wollen
wir den Container zurückgeben. Das ist also unsere erste Methode
in unserem neuen Service. Als Nächstes
wollen wir einen Blob hochladen. Wir werden also eine
Methode namens Upload Blob haben. Es wird eine asynchrone
Aufgabe sein, die eine Zeichenfolge zurückgibt
und die iPhone-Datei
als Parametertyp verwendet. Wenn wir also mit
MVC oder Dotnet Core hochladen, ist I Form File
im Allgemeinen der Datentyp, der
die hochgeladene Datei empfängt. Und dann
geben wir einen Bildnamen ein. Als Erstes lege ich fest, wie der
Blob-Name lauten wird. Und der Bildname hier
steht für den Namen den
ich eine
Datei als Grund speichern möchte. Es ist eine gute Idee,
Ihre Datei vor dem Hochladen umzubenennen . Wenn Sie mehrere Benutzer haben
, die versuchen,
Dateien mit den gleichen Namen hochzuladen,
wird es Wenn Sie mehrere Benutzer haben , die versuchen,
Dateien mit den gleichen Namen hochzuladen, zu
Kollisionen kommen. Es ist also besser, es in
etwas umzubenennen , das für den Datensatz
einzigartig ist. Dann können wir weitermachen und diese Blob-Namen
festlegen. Ich nehme also den Wert des
Bildnamens kann einen eindeutigen Wert
übergeben. Und dann füge ich
diesen Namen an den ursprünglichen Pfad der geladenen
Datei an. Der Pfad, der den Dateinamen der
Erweiterungsformulardatei
erhält ,
schaut
sich den gesamten Dateinamen an, ruft den Punkt, JPEG, PNG, was auch immer es ist, und dann
hängen wir ihn an unseren eindeutigen Namen an. Wir kommen in unser Land
und zu unserem Kunden. Dann richte ich
ein Speicherstream-Objekt ein, in ich aus
der Formulardatei in
den Speicherstream kopiere , die Position auf Null
zurücksetze und dann verwenden wir
den Client laden den Blob mit
dem Blob-Namen aus
dem Speicherstream hoch. In Ordnung? Und dieser Standard steht
für das Stornierungstoken. Du könntest tatsächlich darauf
verzichten. Da wir also keine Stornierungstoken
verwenden
, entfernen Sie diese. Und dann gebe ich den Namen Blob
zurück. Nun, der Client selbst ist
eigentlich der Client, hier wird es
eigentlich eine Art Antwortblob geben, Inhaltsinformationen. Von diesem Objekt aus könnten
Sie sich also den Wert ansehen und verschiedene Informationen
über einen Blob sehen, der gerade hochgeladen
wurde. Wenn Sie mehr Informationen
als nur den Blob-Namen benötigen, können Sie diesen
gerne verwenden. Wir könnten den
Container-Client auch verwenden, um
danach weitere Informationen zu erhalten. Aber vorerst wollte ich nur den Namen der Datei
speichern. Nachdem wir unsere Datei
hochgeladen haben, schauen wir uns an, wie wir
sie abrufen oder bloben würden. Abrufen des
Blobs wird jetzt eine besondere Situation
sein denn was passiert, ist, dass der
Blob-Container,
wenn wir
ihn einrichten , standardmäßig
privat ist. Und wir haben bereits
festgestellt, dass wir URLs verwenden um auf die verschiedenen
Blobs zuzugreifen, sobald sie hochgeladen wurden Wir werden uns die URLs später
genauer ansehen. Tatsache ist jedoch, dass
Sie nicht einfach darauf zugreifen können,
wenn es privat ist. Und Sie möchten es nicht einfach
veröffentlichen, weil Sie vielleicht nie
jemanden finden möchten , der darauf zugreifen kann. Beim Abrufen unserer Blobs müssen
wir also sogenannte SAS-Token generieren, also
Signatur-Token für gemeinsam genutzten Zugriff, und das werden
wir uns in dieser Methode ansehen. Unsere neue Methode
hier ist also get blob URL, die eine Zeichenfolge
zurückgibt. Es ist also eine asynchrone Aufgabe
, die eine Zeichenfolge zurückgibt. Und wieder
nimmt es den Bildnamen an. Also initialisieren wir einen
Container-Client und dann initialisieren wir
auch
einen Blob-Client relativ zu
diesem Image-Namen. Jetzt haben wir das, was wir den Blob Builder
nennen. Und das ist der Builder, der
verwendet wurde, um
das Shared
Access-Signatur-Token zu generieren , auf das ich gerade angespielt habe. Was wir hier also
tun werden, ist Blob-SAS-Builder einem neuen Objekt
entspricht, das
den Containernamen annimmt dass der
Blob-SAS-Builder einem neuen Objekt
entspricht,
das
den Containernamen annimmt, auf den wir zugreifen möchten, den Blob-Namen, auf den
wir zugreifen möchten. Dann legen wir das
Ablaufdatum für dieses Toolkit fest, was bedeutet, dass nach Ablauf
dieser Zeit, und ich setze
es einfach auf 2 Minuten. In Ordnung? Aber nach Ablauf dieser Zeit sollte niemand mehr auf diesen Link
zugreifen oder ihn verwenden können , um
auf die Ressource zuzugreifen. Ich saß im Protokoll für
HTTPS und
die Ressource für B.
Wenn Sie den Mauszeiger über die Ressource bewegen, werden
Sie sehen, dass B spezifisch für Blob
ist. Wenn es ein anderer
Typ ist, kannst du sehen, du kannst sein besagtes C für Container sehen und du hast
verschiedene Optionen. Aber im Moment
machen wir nur Blob Storage. Also legen wir B als
Ressourcentyp fest. Und dann lege ich die Erlaubnis
fest, dass
der Blob-SAS-Builder gelesen werden darf. Bei dieser Aufzählung
müssen Sie möglicherweise eine fehlende Benutzerreferenz
für diese Aufzählung angeben. Aber wir haben hier mehrere
Möglichkeiten. Sie können ein SAS-Token generieren,
das das Löschen,
Anzeigen usw. ermöglicht . Das sind
alles Berechtigungen. Moment wollen wir nur lesen,
weil wir das Bild betrachten
wollen,
wenn wir es abrufen. Und dann geben wir Blob Dot
zurück generieren ein SAS-Token mit den Builder-Optionen,
nicht String. Das wird also losgehen, generieren Sie das SAS-Token und geben Sie uns auch die vollständige URL. Und dann wird es
die gesamte URL an uns zurückgeben. Wissen Sie, wann wir weitermachen, wir wollen
diesen Blob entfernen , wenn der
Datensatz gelöscht wird. Also werden wir
hier eine weitere Methode
haben , die Blob entfernt. Also hat die öffentliche Aufgabe AsyncTask Blob
entfernt und wir nehmen erneut
diesen Image-Namen, stellen eine Verbindung zum Container her erstellen einen Blob-Client. Und dann sage ich einfach
, ich warte, Blob-Punkt löschen,
falls vorhanden, eine Senke. Das ist nur ein Gefühl der Sicherheit. Es gibt Asynchron löschen, aber löschen, falls vorhanden. Hügel mit, wenn es einen gibt,
wenn er nicht existiert, dann liegt kein Fehler vor, dann
können wir alle Schnappschüsse löschen. Denken Sie also daran, dass wir mit
Blob Storage eine
Versionierung haben und jedes Mal
, wenn
es zu einer Kollision kommen könnte, eine neue Version erstellt
und dieser Verlauf beibehalten wird. Wir können uns dafür entscheiden,
alles zu löschen , sobald wir den Blob
entfernt haben. Das war's also für den Koordinator für unseren
Blob Storage Service. Ich werde einfach weitermachen
und diese Schnittstelle extrahieren. Und nachdem diese
Schnittstelle extrahiert ist, springen
wir zu unserer
program.cs und registrieren diesen Dienst genauso
wie für den
Tabellenspeicherdienst. Nein, wir können unsere
Controller und Ansichten umgestalten. Fangen wir mit unseren
Controllern oder Controllern an. Ich werde den Eye
Blob Storage Service injizieren und ihn initialisieren. Wir wissen bereits, wie das geht. Und dann füge
ich für die Indexaktion das für jede Schleife hinzu,
jemanden, der für
jedes Element im Detail sagt. Denn denken Sie daran, dass dies die Teilnehmerliste
zurückgibt. Ich sage, hol
dir den Bildnamen. Also versuche ich, dass der
Bildname dem Blob-Speicherdienst
entspricht, der die Blob-URL und den
Artikelpunkt, den Bildnamen erhält . Warum ersetzen wir diesen Wert? Nun, ich werde nicht die gesamte URL
speichern, ich speichere nur
den Namen, oder? Das ist also eine einzigartige
Namenspunkterweiterung. Also gebe ich den Namen weiter
, den der Blob haben wird. Dann erhalte ich
die gesamte SAS-URL, die ich sie dann ersetzen werde um
zur
Ansicht zurückzukehren und sie anzuzeigen. In einer saubereren
Umgebung hätten wir natürlich
diese Abstraktions- und
Singapur-Ansichtsmodelle geschaffen , damit wir die Daten
besser verarbeiten
könnten und so weiter. Aber ohne all
diese bewährten Methoden ist
dies ein gutes Beispiel
dafür, wie wir
einfach weitermachen und die
URL für diese Paper Pulses abrufen können . Als nächstes haben wir die Details. Für Details machen wir also
etwas Ähnliches. Wir haben den Rekord hier. Und dann
sehe ich mir einfach an, wie ein Punktbild benannt ist, um das Blut zu bekommen. Sie sind wieder einmal keine Methode zum Erstellen von Beiträgen
im Format. Ich habe einen neuen
Parameter hinzugefügt und das ist der I-Form-Dateiparameter. Diese I-Form-Datei
erfasst also den Datei-Upload aus dem Formular, das wir ändern
werden, und einige davon. Ich habe auch
den Code überarbeitet. Also habe ich damit begonnen,
eine ID für ein neues Grid festzulegen. Dann setze ich den
Zeilenschlüssel, um diese ID zu sein. Jetzt
wird mein eindeutiger Name für die Benennung meiner Blob-Dateien die ID sein. Es muss nicht der Ausweis sein. Die ID wird jedes Mal
einzigartig sein. Ich denke, das ist eine einfache Möglichkeit,
einfach in Blob Storage zu schauen und herauszufinden, was was ist,
wann immer ich es brauche. Ich sehe also, ob die Punktlänge der
Formulardatei, was
bedeutet, dass etwas hochgeladen
wurde , größer als Null
ist, dann setze ich den
Bildnamen
so, dass entspricht, was auch immer
zurückgegeben wird. Denken Sie also daran, dass
unser Upload-Blob, wenn ich
zur Implementierung gehe und
das und den Bildnamen anfüge, das die ID ist. Wir machen weiter und
passen das an, laden es hoch. Und dann gebe ich nur das Ergebnis
der Verkettung von
ID und Erweiterung
zurück . Das
werden wir also als Bildnamen haben. Und wenn dann nichts hochgeladen
wurde, können
wir es wie
ein Standardbild einrichten. In Ordnung, und dann machen wir weiter
und absurd den Teilnehmer. Gehen wir zu
unserer Bearbeitung und Bearbeitung über. Wir machen einfach dasselbe
, wenn wir überprüfen,
wo, wenn die Formulardatei größer als Null
ist, dann
laden wir unseren Blob hoch. Ich übergebe diesen
Zeilenschlüsselwert und die Formulardatei, die wir hinzugefügt haben, auch
als Parameter. Eine Sache in der Ansicht, auf die ich nicht hingewiesen habe,
wenn ich hier zur Ansicht gehe, stellt sicher, dass wir uns
daran erinnern, dass wir die
Eingabewerte für den Zeilenschlüssel, den
Partitionsschlüssel und
den Zeitstempel
entfernt haben Eingabewerte für den Zeilenschlüssel, den
Partitionsschlüssel und
den Zeitstempel
entfernt . Um jedoch den ursprünglichen
Zeilenschlüssel für den Datensatz beizubehalten, stellen Sie sicher, dass Sie den versteckten
ASP für den Zeilenschlüssel im Formular
haben . In Ordnung, das ist also Edit. Und dann
gehen wir endlich zum Löschen. Löschen ist
jetzt etwas schwierig, da wir
den ursprünglichen Bildnamen benötigen ,
um den Blob zu entfernen. Also musste ich zuerst
Fitch, den Teilnehmer, tun. Dann können wir
das löschen und dann können wir den Blob
entfernen, indem wir diese Daten
umgehen, diesen Bildnamen, weil wir ihn zuerst abgerufen haben,
wir haben ihn im Speicher. Wir können es aus
dem Tabellenspeicher entfernen und dann das
verwenden, was wir im Speicher gespeichert haben, dann mit diesen
Daten zum Löschen paketieren. Lassen Sie uns abschließend einen Blick auf die verschiedenen Änderungen werfen, die
wir an den Ansichten vorgenommen haben. Für die Create-Ansicht habe
ich also einen neuen Abschnitt hinzugefügt, wir den Avatar
hochladen können. Also habe ich gerade
eine neue Formulargruppe erstellt. Wir haben das Label hier und ich habe gerade unseren Tar hochgeladen. Und dann ist der Eingabetyp Datei, und der Name hier ist so formatiert, dass er
dem Parameter entspricht , nach dem wir im Beitrag
suchen. Und das war's für unseren Create. Und meine
Fähigkeiten zum Kopieren und Einfügen gerieten außer Kontrolle. Lassen Sie mich also das
Validierungszeug entfernen. Und ich benötige dieselbe
Kontrolle innerhalb der Bearbeitung. Also füge ich
diese Formulargruppe einfach auch
zum Bearbeitungsformular hinzu. Wenn also nichts hochgeladen wird, ist
das in Ordnung, denn wir behalten den gleichen Blob und
alles ist gut. Wenn jedoch etwas hochgeladen
wird, laden wir es hoch und es wird den Ersatz
entsprechend vornehmen. Jetzt habe
ich in der Detailansicht dieser Datenliste eine weitere DT
DD-Kombination hinzugefügt. Also hier habe ich Avatar und
jetzt habe ich
das Bild-Tag
, das Bildnamen Model Dot verwendet. Und ich sitze gerade in
unserer Breite von 150 und einer Körpergröße von 150. Dann habe
ich im Index eine weitere Tabellenüberschrift hinzugefügt. Und wenn du es beschriften möchtest, könntest
du Avatar oder
Displaybild sagen, was auch immer es ist. Und dann habe
ich in der TR für die Daten ein neues td hinzugefügt, das ist ein ähnliches Bild-Tag. Die Quelle wird der Name des Punktbilds des Elements
sein, und die Breite wird 50 und die Höhe 50 sein. In Ordnung? habe auch
die Form der Bits überarbeitet, um die HTML-Links innerhalb
des Forums zu
platzieren , sodass sie von links nach rechts
angezeigt werden ,
anstatt wie zuvor planlos
angezeigt zu werden. Ich weiß, ich sagte, wir müssten es
nicht reparieren,
aber es tut mir leid, ich konnte nicht damit
fortfahren, es zu reparieren. Also habe ich diese
beiden Links einfach in das Formular direkt neben
die Schaltfläche Senden löschen eingefügt. Und ich habe die neuen
HTML-Attribute für die Klasse hinzugefügt, BTN-Warnung für Bearbeitung und
btn-primary für Details. all
diesen Änderungen werde
ich also Nach all
diesen Änderungen werde
ich also einfach alles
speichern. Und wenn wir zurückkommen, werden
wir unsere Tests machen.
14. Blob Service-Funktionen: Eine schnelle Anpassung, bevor
wir mit dem Testen beginnen. Denken Sie daran, dass
wir dieses
Attribut in das
Formular aufnehmen müssen, wenn
wir das Hochladen von Formularen oder Dateien in einem Formular erleichtern möchten in das
Formular aufnehmen müssen, wenn
wir das Hochladen von Formularen oder Dateien in einem . Deshalb habe ich es versäumt, in
der vorherigen Lektion
darauf hinzuweisen , dass wir unsere Ansichten
nachrüsten. Der Tintyp entspricht also
mehrteiligen Schrägstrich-Formulardaten. Stellen Sie also sicher, dass dies sowohl im Erstellungsformular
als auch in unserem Bearbeitungsformular
vorhanden ist . Ich werde
dieses versteckte Feld
auch zum Bearbeitungsformular hinzufügen , um sicherzustellen, dass wir den Wert
des Bildnamens beibehalten können. Denken Sie also daran, dass wir den ursprünglichen Bildnamen
beibehalten müssen . Und wenn der Benutzer ein neues Bild
hochlädt, werden wir das alte ändern. Aber wir müssen
die ursprünglichen Bildnamen beibehalten , damit dieser Wert nicht verloren geht
, wenn wir ein Upsert vornehmen. Lassen Sie uns nun zu unserer Bearbeitung übergehen. Nach der Aktion und ich bin gerade zu den Anpassungen gegangen, die hier erforderlich
sind. Erstens möchte ich
diese if-Anweisung nach
oben verschieben , weil wir es absurd gemacht
haben , bevor wir überhaupt versucht haben, zu überprüfen, ob wir die Datei aktualisieren
sollten. Und wir sollten auch das Bildfeld
aktualisieren. Du hast das Namensfeld erwähnt, oder? Also haben wir diesen
Teil bei uns selbst vernachlässigt, aber wir können ihn jetzt korrigieren. Wir sollten also überprüfen, ob die Länge der Formulardatei größer als Null
ist. Und all die Dinge, die
eine Datei bilden, könnten auch null sein. Also werde ich
das irgendwie nicht sicher machen. Setz das Fragezeichen da hin. Wenn die Formulardatei also einen Wert hat, überprüfen
wir die Länge, ob
sie größer als Null ist. Und natürlich könnten wir
auch einfach überprüfen, ob es nicht gleich Null ist, denn dann
hätte es
natürlich eine Länge, aber mit welcher Überprüfung Sie
sich wohler fühlen, dann sagen wir,
dass der Bildname dem
entspricht, was hochgeladen wurde. Wenn wir etwas hochladen, gehen wir
davon aus, dass wir neu sind Wir müssen
diesen Image-Namen aktualisieren. Und dann können wir
weitermachen und aufstehen. Lassen Sie uns nun unsere Datenseite
testen und alle vorhandenen Datensätze löschen
, alle vorhandenen Datensätze löschen weil ich
alles getestet habe und keinen
weiteren Datensatz für die
Durchführung dieses Tests erstellt habe . Wenn Sie also alle
Ihre vorhandenen
Tabellenspeicherdatensätze löschen möchten , können
Sie jederzeit zu
Ihrem Speicherbrowser zurückkehren oder den Speicher-Explorer verwenden, den
Sie möglicherweise heruntergeladen haben. Gehen Sie zu den Tabellen und Sie
sehen die Tabelle, die
wir zuvor erstellt haben, und dann können Sie
jeden Datensatz löschen , den Sie Ihrer Meinung nach löschen müssen. Wenn ich nun starte,
starte ich diese Anwendung und navigiere zur
Registrierung. Dort sehen wir unseren Tisch. Lass mich einen neuen Datensatz erstellen und ich werde einen Avatar
hochladen. Und ich wähle
hier ein Bild aus und gebe ihm Vorname, Nachname, E-Mail-Adresse
und Branche und dann Erstellen. Und da haben wir es. Jetzt sehe ich ein Bild, das hier in Avatar
angezeigt wird. Schau dir das an. Und ich sehe all
die Daten, die
verwendet wurden, um zu wissen, was dieses Bild ist. Wenn ich auf Details klicke, erhalte
ich einen defekten Link. Es ist also klar, dass
wir hier etwas arbeiten müssen. Und was ich
tun werde, ist das Element zu inspizieren. Und da haben wir es. Das ist der Fehler. Hey, es druckt eigentlich
die Worte, modelliere das Bild. Also lasst uns einfach rüberspringen und
das dort reparieren , wo das
eigentlich am Schild sein sollte. Und das sollte kein kleines Modell
sein, das sollte ein großes M-Modell sein
, um die Daten darzustellen. Lassen Sie mich das
beheben und erneut ausführen. Und wenn ich den Datensatz hier neu lade
, wird das Bild richtig
angezeigt? Nein, ich habe mein
Inspect Element immer noch geöffnet. Und wenn Sie sich diese URL ansehen, werden
Sie feststellen, dass dies
die URL zum eigentlichen Blob ist. Lassen Sie uns also überprüfen, was die
ganze URL-Sache ist. Wenn ich zurück
zum Portal gehe und es aktualisiere, sehen
wir unseren Datensatz und/oder den Datensatz mit einem Bildnamen. Das ist natürlich dieselbe
Wertepunkterweiterung wie der
Zeilenschlüssel. Das ist in Ordnung. Wir haben es erneut umbenannt,
damit wir bei jedem Upload
Einzigartigkeit
haben können . Wenn ich nun zu
den Blob-Containern übergehe, werden Sie als Erstes sehen, dass die Teilnehmerbilder erstellt
wurden und
dass sie als privater
Blob oder Container erstellt wurden, oder? Wenn ich reingehe und mir die Bilder ansehe, wird
jeder Blockblob
, der sich in diesem Container befindet, auch
privat sein. Also kann ich hierher gehen und
die URL kopieren. Wenn ich versuche, zu
dieser URL zu gehen, erhalte
ich die Meldung, dass die angegebene Ressource nicht
existiert. Jetzt wissen wir, dass das
nicht stimmt
, denn hier ist die URL zum Blob-Speicher und dann der Container
und dann der Name
der Datei und wir haben
ihn einfach kopiert , damit wir wissen, dass
die Datei existiert. Da es in der Zugriffsebene auf
privat gesetzt ist, können
wir nicht direkt über die URL darauf
zugreifen. Auch hier können
wir je nach Zugriffsebene
den Großhandelszugriff
auf alle Blobs
in unserem Container aktivieren oder einschränken . Nun, dieser ist privat. Deshalb generieren wir
diese SAS-URL. Und wenn ich dann auf SAS generieren
klicke, sehen
Sie, dass wir
jetzt all
diese Parameter einrichten und dann das SAS-Token und die URL
generieren können . Und
wenn dieser Tolkien
und die URL generiert wurden, kopiere ich das und
versuche dann erneut,
im Browser darauf zuzugreifen. Nun, mein Browser lädt die Datei tatsächlich
herunter. Ordnung, also das
passiert, wenn ich, wenn Sie einen
bestimmten Browser verwenden,
in anderen Browsern verwende, wird die Datei
tatsächlich geöffnet. Aber schauen wir uns die URL ein bisschen an und fügen sie
in Notepad Plus, Plus ein, damit wir sie etwas genauer
überprüfen können. Nein, wir beginnen
wieder mit den gleichen Teilen, der Aufbewahrung der Kegel, dem Behälter und
dann dem Dateinamen. Und dann werden Sie feststellen, dass
Sie eine Abfragezeichenfolge haben. Also haben wir Sb, das
ist die Erlaubnis, das war's für unser
Windows. Es fängt an. Okay. Das ist der richtige Zeitpunkt. Wann endet es? Das ist der richtige Zeitpunkt. Was
ist das Protokoll? Https, und dann
haben wir andere Parameter. Der Typ ist Blob und die Signatur ist diese
zufällige degenerierte Zeichenfolge. Und SV dort steht für
eine signierte Version, oder? würdest du nicht einstellen,
das wird gesetzt, während die Signatur generiert
wird. Das bringt dieses
SAS-Token die Tabelle, wo wir
diese spezielle URL erhalten, die den Zugriff
so lange
ermöglicht, wie wir zwischen der
Start- und Endzeit liegen. Und du siehst hier, das
war für einen Tag angesetzt. Dabei wurden nur
die Standardoptionen verwendet. Aber natürlich können wir eine Zeitspanne
festlegen, die
spezifisch für den Zweck ist , für den
wir das Token benötigen. Jetzt haben Sie
einen Einblick in das,
was hinter den Kulissen passiert , wenn wir diese URL erhalten. Lass uns zu Edit springen. Und wenn wir mit
Fetch the Record bearbeiten, lassen Sie mich versuchen, diese Datei zu ändern. Und nachdem ich auf Speichern geklickt
habe, ist ein Fehler aufgetreten. Also möchte ich Ihnen natürlich die Steuerbehörde
zeigen und dann werden wir sie gemeinsam
durcharbeiten. Der Fehler hier, der nach dem Versuch
,
einen Blob hochzuladen, aufgetreten ist, war also , dass der angegebene Blob
bereits existiert. In Ordnung? Also können wir natürlich keinen
Blob hochladen , der diesen Namen bereits
hat. Also, was ich tun werde, ist den Blob zu entfernen, falls
er bereits existiert, und dann können wir
weitermachen und ihn erstellen. Blob hochzuladen, springen
wir also zum Um Blob hochzuladen, springen
wir also zum Upload von Blob und ändern, was
innerhalb dieser Methode passiert. So wie es aussieht, gehen
wir einfach
zum Container und
versuchen ihn hochzuladen. Und wenn Sie den Mauszeiger darüber bewegen, sehen
Sie, wo steht, dass ein neuer Block-Blob
erstellt wird, was bedeutet, dass,
wie Sie gesehen haben, offensichtlich eine Ausnahme
zurückgegeben wird, für
die der Blob bereits existiert. Deshalb ist es sehr wichtig, die
Dokumentation zu lesen. Um einen
vorhandenen Block-Blob zu überschreiben, besorgen Sie sich einen Blob-Client
und laden Sie ihn dann hoch. Ordnung, wir nehmen
die Anweisungen, damit wir diese Zeile, in
der wir den Blob-Client haben, wiederverwenden
und diese ursprüngliche
Upload-Zeile durch
eine neue ersetzen
können und diese ursprüngliche
Upload-Zeile durch
eine neue ersetzen , die besagt, dass ein feuchter
Blob-Punkt-Upload async erfolgt. Und dann gebe ich weiter,
ich verwende benannte Parameter, also weiß genau, was
wir übergeben, wo der Inhalt der Speicherstream
sein wird. Und dann
überschreiben wir wahr. Wenn Override also auf true gesetzt
wird, werden
alle vorhandenen Blobs überschrieben. Und ohne
diese Einstellung wäre es falsch. Am Ende wird also dieselbe
Ausnahme wie bei uns angezeigt, wenn wir es versäumen
, diesen Override-Parameter einzugeben. Jetzt gibt es noch eine
Wendung. Und das ist, wenn ich zunächst
einen J-Peg hochladen und ihn dann
in ein PNG ändere. An diesem Punkt werden
wir,
obwohl der ID-Wert der Bildname derselbe ist, und der Bildname derselbe ist,
am Ende zwei verschiedene Dateien haben. Und müssen wir wirklich alte Dateien
speichern, oder? Technisch
gesehen könnten Sie also
auch einen Löschvorgang ausführen, bevor Sie
das Laden durchführen , nur um sicherzustellen
, dass Sie am Ende nicht zwei verschiedene Versionen dessen haben, was der Avatar einer
Person sein sollte. Das können Sie
also auch in Betracht ziehen. Um dem zu entsprechen, was
in der Bearbeitungsaktion passiert ist, werde
ich
den ursprünglichen Bildnamen
als Parameter an unsere
Upload-Blob-Methode senden den ursprünglichen Bildnamen , was bedeutet, dass wir jetzt einen neuen Parameter
einführen müssen . Unser neuer Parameter
wird also eine Zeichenfolge sein, was kein hörbarer
ursprünglicher Blob-Name ist. Und ich initialisiere es auf nicht. Und wenn wir die Schnittstelle
aktualisieren,
müssen wir natürlich auch
die Implementierung aktualisieren. Und wir haben den gleichen
Parameter hier aufgeführt. Jetzt, wo wir diesen
ursprünglichen Blob-Namenswert haben, werde
ich überprüfen, ob er existiert. Also werde ich sagen,
wenn der String Dot
Null oder leer ist und diesen Wert
übergeben, dann wollen wir warten, Blob
entfernen und ihm
den ursprünglichen Blob-Namen geben. Wir werden
den vorhandenen Blob entfernen und dann können wir mit
dem Hochladen fortfahren. Sie sehen also, dass in unserem Fall
viele Dynamiken zu
unterscheiden sind ,
da wir am Ende möglicherweise unterschiedliche Dateien
und Erweiterungen haben und wir nicht garantieren
können
, dass diese immer die bestehende überschreiben. Es ist sicherer für uns, den
alten zu entfernen und dann den neuen
hinzuzufügen. In einer
Situation, in
der der Dateiname vielleicht trotzdem immer konsistent ist , müssen Sie das alles wahrscheinlich nicht durchmachen. Aber noch einmal Optionen. Nun, da wir
diese Anpassungen vorgenommen haben, lassen Sie uns fortfahren
und unsere Änderungen testen. Schon wieder. Ich habe das Formular geladen, ich habe bereits meine andere
Datei ausgewählt, und dann werde ich sehen. Und da haben wir es. Jetzt
habe ich einen brandneuen Avatar. Ich habe den Upload
oder das
mit diesem Datensatz verknüpfte Blob-Bild erfolgreich
geändert . Das ist also nett und einfach. Natürlich hatte es einige Nuancen. Kennen Sie das
Beispiel, das ich gegeben habe, wo die Dateierweiterung unterschiedlich sein
kann und wir am Ende
mehrere Dateien für denselben Datensatz haben,
den ich tatsächlich
hatte, der mir passiert ist. Also hier ist eine Version mit JPEG und eine andere
Version mit PNG, der Ursprung der PNG-Dateien, die neue Datei war JP, und anstatt sie zu ersetzen, habe ich einfach eine neue
erstellt, die ich dereferenzieren
muss. Aus diesem Grund sollten Sie vor dem Hochladen
entfernen, um
sicherzustellen , dass Sie nicht
mehrere potenzielle Dateien haben. Sogar dieser wurde zuvor
ohne Erweiterung hochgeladen. sind kleine Dinge, bei denen
du vorsichtig und
vorsichtig sein solltest, wenn du mit Blobs umgehst. Abschließend werde
ich das Löschen testen. Lassen Sie uns also diesen Datensatz löschen und wir wissen, dass der
erforderliche Tabellenspeicher gelöscht wurde. Lass uns wieder hierher springen und mindestens eine dieser
Dateien sollte verschwinden. Okay, zwei davon sind weg , weil ich
das Original entfernt habe. Dann habe ich auch
den entfernt , der an den Datensatz
angehängt war. Dieser war an nichts angehängt sodass ich ihn manuell löschen
kann. Das ist in Ordnung. Aber zumindest wissen wir
jetzt, dass wir erfolgreich in unseren Blob-Speicher schreiben
und aus unserem Blob-Speicher
lesen, indem wir einen Aufsatz, einen Stiel,
verwenden. Und das gibt uns nur für diesen Zeitraum eingeschränkten
Zugang. Und wir sind in der Lage, eine neue zu entfernen
und hochzuladen, Dateiverknüpfungen zu
ändern
und so weiter. Wenn wir jetzt
zurückkommen, werden wir unseren Warteschlangendienst
implementieren. Und die Szenarien, die wollen, dass sich
ein Teilnehmer registriert hat. Wir möchten eine E-Mail versenden, aber wir möchten uns nicht
direkt mit dem E-Mail-Dienst verbinden . Stattdessen möchten wir
es einer Warteschlange hinzufügen, damit es später
unverarbeitet verbraucht werden
kann.
15. Queue Service hinzufügen: Also werden wir jetzt
unsere Warteschlangenmechanismen implementieren. Das erste, was ich tun werde
, ist ein neues Modell zu erstellen. Ich modelliere
einen Datensatz weil
wir ihn nicht speichern
werden. Aber ich möchte einen Kurs,
damit wir
eine entsprechend stark getippte
Nachricht haben können . Also werde ich
diese eine E-Mail-Nachricht nennen. Und die
E-Mail-Nachricht wird drei Eigenschaften haben. Die erste
wird also eine Zeichenfolge sein, die die E-Mail-Adresse ist. Dann werden wir Zeitstempel
haben. Also sage ich einfach Datum,
Uhrzeit nennt man diesen Zeitstempel. Und das Letzte ist
die eigentliche Botschaft. Das ist also gut für den Moment. Und dann müssen
wir uns wie immer auf
einen neuen Service einstellen. Lassen Sie uns also weitermachen und
einen weiteren Cluster- oder
Dienstordner hinzufügen . Dieses Mal nennen wir
es einen Service. Und unser Warteschlangendienst wird einen Konstruktor haben
, der unsere Konfiguration einfügt,
ähnlich wie bei anderen Diensten, wir werden auch einen festgelegten Warteschlangennamen
haben
, den ich als
Teilnehmer-E-Mails nenne. Jetzt werde ich einfach ein Publikum
haben, das ist eine Aufgabe einer öffentlichen Aufgabe
namens Nachricht senden. Und das Senden einer Nachricht
nimmt das E-Mail-Nachrichtenobjekt entgegen. Also E-Mail-Nachricht, und ich nenne es
einfach E-Mail-Nachricht. Und die Sache ist, dass ich in diese Warteschlange
hart codiere. Möglicherweise möchten Sie
diese Flexibilität aber auch gegenüber
anderen Hinweisen beibehalten diese Flexibilität aber auch gegenüber , mit denen Sie möglicherweise interagieren
müssen. Was Sie also
für diesen Warteschlangendienst tun könnten ist, anstatt
diesen Warteschlangennamen festzulegen, Sie könnten hier einfach den
Zeichenkettennamen als Parameter sagen . Damit Sie
den Warteschlangennamen tatsächlich festlegen können , wenn Sie die gewünschte
Nachricht
weitergeben. Aber dann ist das ein bestimmtes. Also werde ich einfach alles
spezifisch für unseren
E-Mail-Nachrichtenbetrieb
machen . Jetzt initialisiere ich einen Queue-Client und werde mir diesmal
nicht die Mühe machen,
dafür eine ganze Methode zu erstellen , da wir
nur eine Nachricht haben, eine Methode, die
eine gesendete Nachricht
ist. Also habe ich gesagt, var
acute client entspricht einem neuen Queue-Client, für den wir die Verbindungszeichenfolge
benötigen. Das bekommen wir aus
der Konfiguration. Wir erhalten den Namen der Warteschlange
basierend auf diesem Wert. Und dann stellen wir die Warteschlangen-Client-Optionen so ein,
dass sie die 64 für Nachrichten codieren. Denken Sie also daran, dass wir das
aufschieben, ein- und ausschalten. Wenn wir
die Warteschlange selbst erstellen. Dann sehen
wir wie üblich, einen Q-Client oder eine Warteschleife, die Clients mit einem Punkt erstellen, falls nicht, existiert, eine Senke. Also stellen wir
sicher, dass es existiert, bevor wir versuchen
, eine Nachricht zu senden. Um eine Nachricht zu senden,
können wir ganz einfach sagen Q Client Punkt Nachricht senden. Und natürlich
gibt es eine asynchrone Option, aber lassen Sie mich weitermachen und eingeben, wie die
Nachricht lauten sollte. Beachten Sie also, dass diese
einen Zeichenkettennachrichtentext erwarten, aber wir haben ein Objekt
einer E-Mail-Nachricht. Also lass mich weitermachen
und ich warte zuerst. Wie konvertiere ich das nun in etwas, das als Zeichenfolge gesendet
werden kann? Nun, wir können
es als JSON serialisieren. Ich kann also sagen, dass die Var-Nachricht JSON
entspricht, konvertiere dieses serialisierte Objekt. Und dann geben wir
unsere E-Mail-Nachricht , die unsere Klasse einfach
in eine JSON-Nachricht oder ein
JSON-String-Objekt konvertiert . Und dann können wir diese
Zeichenfolge als unsere Nachricht weitergeben. Wir können unsere Schnittstelle extrahieren. Das ist die einzige Methode, die wir benötigen,
um das Interface zu extrahieren es wie gewohnt in
der program.cs zu registrieren, und wir fügen
es als Sculpt hinzu, genau wie die anderen
Dienste davor. Und dann können wir Änderungen vornehmen oder die Ridges werden der Registrierungsprüfung unterzogen. Und nachdem wir unseren neuen IQ-Service eingeführt haben, IQ Service, gefällt mir dieser Name. Jetzt können wir die Hotspots ändern. Offensichtlich entsteht
also ein Hotspot an dem wir, nachdem alles erledigt
ist und wir gespeichert haben, unsere E-Mail-Nachricht erstellen wollen. Ich kann also sagen, dass var email einer neuen E-Mail-Nachricht
entspricht. Und ich werde die
E-Mail-Adresse so einrichten, dass sie
der eingegebenen Entitätspunkt-E-Mail-Adresse des Teilnehmers entspricht. Stimmt. Wir können den Zeitstempel
auf ein Datum und eine UTC-bekannte Uhrzeit setzen, und dann können wir unsere
Nachricht so einstellen, dass sie
so etwas wie Hallo, Vorname,
Nachname, Hallo lautet. Und sie haben sich
nur verkettet. Also verwenden wir,
naja, Interpolation. Also verwenden wir hier
Interpolation. Und dann habe ich die
Zeile mit dem umgekehrten Schrägstrich n, dem umgekehrten
Schrägstrich r mitgebracht . Vielen Dank, dass Sie
sich für diese Veranstaltung angemeldet haben. Und ich habe ein gerades Up. Und dann habe ich die Zeile
noch einmal gebracht und dann gesagt, Ihre Aufzeichnung wurde
zum späteren Nachschlagen gespeichert. Jetzt, wo ich
dieses E-Mail-Objekt
habe, kann ich meinen
Warteschlangendienst und C aufrufen, eine Nachricht
senden und
sie einfach an diese E-Mail-Objekte weiterleiten. Natürlich wissen wir, dass wir
ähnliche Dinge an anderer Stelle in
unserer Anwendung tun können ähnliche Dinge an anderer Stelle in , denn
wenn sie bearbeitet
wird, könnten wir sie darüber informieren
, dass sie nicht geändert wurde. Also hallo, FirstName, LastName, Ihr Datensatz wurde
erfolgreich geändert und dann senden
wir diese Nachricht. Und wenn es dann gelöscht wird, kann
ich das auch tun,
denn denken Sie daran, wir hätten
diese Daten hier vorgeladen. Nachdem alles entfernt
wurde, erstellen
wir
unsere E-Mail-Nachricht und ich habe sie kopiert und eingefügt. Also
würden wir hier natürlich Daten als
Objekt für
E-Mail-Adresse, Vorname, Nachname verwenden . Dann
wird die E-Mail-Nachricht so geändert, dass sie erfolgreich entfernt wurde, und dann senden wir los. Das ist also alles, was wir
unseren Warteschlangendienst
in unseren Betrieb integrieren
würden . Wenn wir jetzt zurückkommen, werden
wir das alles validieren.
16. Test Queue Service: Lassen Sie uns also jemanden
testen, um
einen neuen Datensatz zu erstellen und ein Bild
hochzuladen. Und natürlich verwenden wir
nur Test, Test,
Test und IoT, das von der Industrie geschaffen wurde. Und sobald wir das validiert haben, haben
wir einen Datensatz und
unser Blob hochgeladen, wir können zu
unserem Storage Explorer wechseln. Und ich werde
alles aktualisieren, damit ich sehen kann ob die neue Warteschlange oder der neue
Tennisschläger darauf hindeuten, und dann Refresh sagen. Und jetzt sehe ich die E-Mails der Teilnehmer als meine Warteschlange und springe da rein. Und ich habe mehrere Nachrichten
, weil ich getestet habe, oder? Sie können hier sehen, dass wir mehrere Nachrichten
haben und ich habe eine vollständige Crud-Operation durchgeführt um sicherzustellen, dass
jede Nachricht funktioniert. Ich habe hier also einen
, der zeigt, wann er erstellt
wurde, Ihr Datensatz
wurde nicht zum späteren Nachschlagen gespeichert. Das ist gut. Und dann haben
wir hier noch einen, der besagt, dass er erfolgreich
entfernt wurde. Wir haben hier noch eine
, die besagt, dass es okay war, ich habe keine Änderungen vorgenommen, aber Sie sehen hier, dass all
diese Nachrichten
tatsächlich in der Warteschlange stehen. Stellen wir uns jetzt vor, dass der E-Mail-Dienst
eigentlich nicht funktioniert, oder? Das
hätten also E-Mails sein sollen , die sofort versendet werden. Aber unser E-Mail-Service war Morgendämmerung. Das bedeutet, dass sich der Benutzer registriert
hätte und wir den Betrieb möglicherweise mit
dem Eindruck
verlassen hätten den Betrieb möglicherweise mit
dem Eindruck
verlassen , dass er oder
eine Verteilung vor Ort ist. Weil der E-Mail-Dienst das Website-Feld erledigt
hatte um eine Verbindung herzustellen und dann eine Ausnahme auszulösen und
gab ihm wahrscheinlich eine Fehlermeldung. Wir wollen nicht, dass
das passiert, oder? Ein anderes Szenario ist, dass okay, vielleicht haben wir die richtige
Fehlerbehandlung eingerichtet. Also, obwohl wir
versucht haben, eine Verbindung mit dem
E-Mail-Anbieter herzustellen, haben wir keine Ausnahme ausgelöst, aber dann ist diese E-Mail für immer
verloren, oder? IQ ist also eine hervorragende Möglichkeit
, unsere Nachrichten
für unseren Betrieb aufzubewahren, bis wir sie später tatsächlich
verarbeiten können. Wenn wir zurückkommen und
jetzt wissen, dass unser Q so
funktioniert, wie wir es erwarten, werden
wir
ein kleines Hilfsprogramm erstellen, das die Nachrichten tatsächlich aus der Warteschlange heraussucht. Und sobald wir die
Nachrichten aus der Warteschlange erhalten haben, kann die Operation, die Sie ausführen
müssen , ausgeführt
werden.
17. Protokolle und Dienste-Aufrufe: Während wir unsere App testen, möchte
ich mir nur
ein paar Sekunden Zeit nehmen, um darauf hinzuweisen, was in der Konsole
passiert, damit Sie ein
Gefühl dafür bekommen, was hinter all
diesen Serviceaufrufen
passiert. Also haben wir
unseren Tabellendienst oder
Blob Storage Service und
unseren Queue Storage Service verkabelt . Und wenn Sie sich die Konsole oder
die Protokolle
ansehen , die von
der App für jede Anfrage ausgespuckt werden, werden
Sie feststellen, dass
wir nur
GET und Post und
verschiedene Arten von
HTTP- oder
HTTPS-Anfragen an eine Reihe von URLs senden GET und Post und
verschiedene Arten von . Wirklich und wahrlich, es ist nicht viel
komplizierter als das. Im Wesentlichen sind
unsere Service-Kunden und
all diese nur Wrapper für HTTP-Clients
, die
über RESTful-APIs mit
jedem unserer Dienste kommunizieren . Und wir haben zu
Beginn des Kurses gesagt, dass die RESTful-APIs es uns ermöglichen, mit unseren Ressourcen zu interagieren und sie zu verwalten
. Hier ist ein Live-Beispiel
für Holdout-Werke. Wenn wir also mit unserem Tabellendienst sprechen rp geladen ist, haben wir versucht, die Daten abzurufen. Ordnung, und später wirst du
sehen, dass wir mit,
okay, hier ist eine, für die
wir ein Tool bekommen. Stimmt. Hier ist
der, den ich wollte bei dem ich den Datensatz gelöscht habe. Also wurde es aus dem Blob gelöscht. Wenn Sie sich also die
URL ansehen, werden Sie feststellen,
dass das der Blob-Service ist, oder? Und es hat diesen Blob-Namen gelöscht. Und das ist eine Löschanfrage. Ordnung, hier ist die
Ausgabe, in etwas an der Q
aktualisiert wurde. Ordnung, das ist also die
URL zum Warteschlangendienst. Und hier ist eine Post-Anfrage ,
bei der
etwas unter Q erstellt wurde. Und hier werde ich von
den Tabellen abgeholt. Ich weise also nur darauf hin
, dass alles wirklich
nur ein RESTful-API-Aufruf ist , der im Hintergrund
stattfindet.
18. Queue Message Reader einrichten: wir nun wissen, dass
unser Dienst funktioniert, lassen Sie uns einen Dienst erstellen
, der
diesen Warteschlangendienst abonniert und
dann die Nachricht verarbeitet. Und was auch immer Sie damit machen
müssen,
Sie können es danach tun. Aber lassen Sie uns ein
Hilfsprogramm erstellen, das Verbindung zu
diesen Nachrichten herstellt und sie verarbeitet. Was werde ich tun, um eine Konsolen-App zu
erstellen. Also werde ich
in der Lösung ein neues Projekt
öffnen oder ein neues
hinzufügen. Und diese wird eine einfache Konsolen-App
sein. Wählen Sie also eine Vorlage für eine
Konsolen-App. Und wir werden diese eine Console
Dot Q Consumer Dots Demo
nennen . Und dann fahren wir
fort und klicken auf Weiter. Wir verwenden die
neuesten.net7,
die zum Zeitpunkt der Aufnahme
und der Erstellung verfügbar sind . Jetzt muss ich ein Paket hinzufügen, und ich muss
dasselbe Paket hinzufügen, das wir zuvor für Queue-Speicher
hinzugefügt haben
, also
Null-Punkt-Speicherwarteschlangen . Also ich gehe einfach schnell
und ich denke, inzwischen wissen wir alle, dass wir ein Ganzes
oder Pakete schnell hinzufügen müssen. Also werde ich
diese Route wählen , bei der ich
einfach
eine neue Artikelgruppe erstelle und dann einfach dieselbe Paketreferenz einfüge , die in der MVC-App war. Und spar dir das. Und du
wirst im Hintergrund losgehen und
diese Abhängigkeit für mich lösen. Lassen Sie uns jetzt etwas Code schreiben. Das erste, was wir tun
möchten,
ist natürlich die Verbindung zu
unserem Warteschlangenspeicher
einzurichten oder herzustellen, oder? Und das geschieht über unsere Verbindungszeichenfolge für das
Speicherkonto. Wissen Sie, Sie haben dabei ein paar Optionen
.
Die einfachste Option wäre, hier einfach eine Variable
zu erstellen. Ich werde die
Verbindungszeichenfolge genannt und gebe ihr den Wert. Aber aus dem
offensichtlichen Grund, dass Sie Ihre
Verbindungszeichenfolge
nicht
direkt in den Code und die fest codierte
Ebene einfügen möchten direkt in den Code und die fest codierte , werden
wir diesen Ansatz nicht verfolgen. Für diese Situation
können wir ein Secrets verwenden, was bedeutet,
dass wir
ein paar zusätzliche Pakete installieren ein paar zusätzliche Pakete und sie in
einer Konfigurationsdatei speichern und dann entsprechend darauf
verweisen müssten. Und dann können
wir im weiteren Sinne auch einfach
eine globale
Umgebungsvariable auf unserem Computer festlegen . Und wenn
wir
diese Anwendung dann auf einem
anderen Computer bereitstellen wollen, müssen
sie natürlich sicherstellen, dass auch eine
Umgebungsvariable existiert dort auch eine
Umgebungsvariable existiert
, die diesen Ansatz für diese
spezielle Übung verfolgt. Dazu verwenden wir
unser Terminalfenster. Und unabhängig davon, ob Sie es verwenden, wenn Sie sich auf einem Windows-Computer befinden, werden
wir den
folgenden Befehl verwenden. Und dann zeige ich
euch das entsprechende für Linux und macOS. Wenn Sie sich auf einem Windows-Computer befinden,
unabhängig davon, ob Sie Visual
Studio- oder Visual Studio-Code verwenden, können
Sie set X, den Vornamen, die
ich als Ihre
Speicherverbindungszeichenfolge sehe, sagen . Und dann legen wir
den Wert hier fest. Also springe
ich einfach zu dem
Webprojekt, in dem wir den Wert
der Verbindungszeichenfolge
aus früheren Übungen hatten . Und das werde ich
hier als Wert und Set verwenden. Achten Sie auf die richtige
Formatierung. Sie können sehen, dass ich einige
Fehler hatte, weil ich ein Komma kopiert und
zusätzliche Anführungszeichen hinzugefügt habe. Stellen Sie also sicher, dass Sie
nur die Anführungszeichen und den Wert dazwischen erhalten. Wenn Sie nun
Linux oder Mac OS verwenden, ist
der Befehl
im Grunde identisch. Aber anstatt Set X zu sagen, werden
Sie Exporte sehen. Und es ist dasselbe Format
, um den Namen
der Variablen und
dann den Wert zu exportieren . Ein Nachteil dieser Methode
ist, dass Sie Ihren Computer danach möglicherweise
neu starten müssen ,
damit Sie auf Pause und
Neustart klicken können . Wenn Sie zurückkommen, wir dort weiter, wo wir aufgehört haben. Nachdem wir diese Umgebungsvariable festgelegt
haben, können
wir die
Verbindungszeichenvariable hier festlegen. Ich werde also sagen, dass die
Zeichenfolge der Zeichenfolge der Umgebung
entspricht, die Umgebungsvariable
abrufen und
wir finden sie anhand ihres Namens. In Ordnung, dann
initialisieren wir einen neuen Queue-Client. Und das wird ähnlich sein wie
das, was wir zuvor gemacht haben. Cute Client Q
entspricht nu q client verweist auf die
Verbindungszeichenfolge und den Namen dieses Q. Ich werde versuchen,
Nachrichten aus der Warteschlange abzurufen. Das erste, was
ich tun möchte, ist sicherzustellen, dass die QA existiert, was nur das
Rudimentäre ist, oder? Wenn ich warte, ist Q dot Q vorhanden. Und dann werde
ich innerhalb
dieser If-Aussage weitermachen und überprüfen
, ob werde
ich innerhalb
dieser If-Aussage weitermachen und überprüfen da viele Nachrichten sind. Also zuerst, um die Immobilie zu
bekommen. Also sage ich, Q properties
entspricht unserem Gewicht q dot get
properties a sink. Und wenn ich
diese Eigenschaften habe, kann
ich jetzt überprüfen, ob
die ungefähre, Entschuldigung, Nachricht Kegel lautet. Ich werde sagen,
während Eigenschaften diese ungefähre Nachricht
Cohens d ist größer als Null. Okay, das ist also
nur eine Zahl, die
angibt, wie viele
Nachrichten sich in der Warteschlange befinden. Und dann richte ich eine
Zeitschleife ein, um zu sagen,
naja, solange
Nachrichten in der Warteschlange sind, wollen wir etwas tun. Also werde ich sehen, mach weiter
und hole die Nachrichten ab. Also werde ich sagen, dass die Zeichenkettennachricht
gleich ist und ich warte
auf die Methode, die ich
gerade erstellen, abrufen werde . nächste Nachricht ist sink, oder wir müssen uns nicht unbedingt an diese asynchrone
Namenskonvention
halten. Aber ich will abrufen, lass mich meine Rechtschreibung richtig machen. Und dann sage ich Konsolenpunkt, schreibe Zeile und
drucke die Nachricht aus. Und ich setze nur das erhaltene Wort
auf. Lassen Sie uns diese Methode implementieren. Also werde ich einfach die folgende Methode
degenerieren. Es wird eine asynchrone
Methode sein, die eine Zeichenfolge zurückgibt. Und innerhalb dieser Methode ich zuerst eine
Nachricht ab. Nein, Sie können bis
zu mehrere Nachrichten
gleichzeitig abrufen , oder? Also wollte ich
Queue-Nachricht sagen, abgerufene Nachricht,
und das ist ein Array. Und dann wartete ich auf den Q-Punkt, um Nachrichten asynchron zu empfangen. Und dann können wir einen Kegel nehmen. Dieser Kegel ist die maximale
Anzahl von Nachrichten und das Minimum ist eins
und das Maximum ist 32. Also ich kann tatsächlich sagen, gib mir bis zu 32
Nachrichten auf einmal. Aber im Moment mache ich einfach
einen. Also werden wir sie eins nach dem anderen
verarbeiten. Und dann
muss ich von
Base-64 in ein Byte-Array
und dann von einem
Byte-Array in eine Zeichenfolge konvertieren Base-64 in ein Byte-Array . Ich werde dir das
alles erklären. In unserem Storage Explorer. Wenn wir uns unsere Nachrichten
ansehen, sehen
wir, dass die Nachricht im
Klartext bleibt , und das sieht gut aus. Wenn Sie jedoch
darauf doppelklicken, werden
Sie sehen, dass es Ihnen
zeigt, dass es es als base-64
dekodiert hat . Es zeigt mir also,
was in der Nachricht steht. Aber wirklich, wenn Sie
es sich im Ruhezustand ansehen würden, wenn jemand Zugriff auf
die Warteschlange haben möchte
und einfach versuchen
zu sehen, dass die Nachrichten
versuchen , die Nachrichten abzufangen wenn jemand Zugriff auf
die Warteschlange haben möchte
und einfach versuchen
zu sehen, dass die Nachrichten
versuchen, die Nachrichten abzufangen,
anstatt nur
eine Base-64-kodierte
Zeichenfolge zu sehen, die die Texte
nicht wirklich sehen würde, als
ob Sie sie eine Base-64-kodierte
Zeichenfolge zu sehen, die die Texte
nicht wirklich sehen würde sehen würden. Nein. Aus diesem Grund werden
diese Nachrichten,
wenn wir
sie verarbeiten, tatsächlich
als Base-64-kodierte Nachrichten ausgegeben. Und dann muss ich
von Basis 64 konvertieren, oder? Das ist also die
base-64-kodierte Zeichenfolge. Das sind also eigentlich
Binärdaten, oder? Und dann kann ich von dieser Beta-RE wieder
zu UTF konvertieren. Das ist also alles, der
ganze Ablauf muss funktionieren. Wenn wir die Base-64-Codierung verwenden, ich
die Nachricht, nachdem
ich sie aus der Warteschlange abgerufen habe, möchte ich
die Nachricht, nachdem
ich sie aus der Warteschlange abgerufen habe, entfernen. Also werde ich sagen, dass eine Nachricht mit einem Gewicht
von einem Punkt asynchron gelöscht wird. Und wir entfernen es
anhand der abgerufenen Nachricht
als anhand der Nachrichten-ID
und der Pop-Quittung der abgerufenen
Nachricht. Ordnung, und wenn Sie
den Mauszeiger über diese Eigenschaften bewegen, werden
Sie sehen, was die
einzelnen Eigenschaften bedeuten. Also im Wesentlichen, nachdem wir die Nachricht
verarbeitet haben oder wir
die Nachricht abgerufen haben und wir sie aus der Warteschlange entfernen können. Und dann werde ich die Nachricht
zurücksenden, die wir dann verarbeiten können.
Daran kann ich mich nicht erinnern. Ja, wir werden dieses Rattenland
trösten,
aber das könnte leicht
sein, die E-Mail zu senden oder in der Datenbank zu speichern. Denn wenn es sich um eine
asynchrone Operation handelt
und danach etwas ist, das passieren
muss. Wie wir bereits sagten, insbesondere in einer
Microservices-Situation, hätten
dies die Agenten sein können, die den Knoten
unabhängig von dem Prozess
, den der
Skew antreibt, das
Ankerbein abwickelt , oder? Das ist also nur eine
einfache Konsolen-App. In einem realen Szenario würden
Sie wahrscheinlich unsere Arbeit
oder unseren Dienst verwenden
, der immer aktiviert ist und den Sie jedes Mal
manuell ausführen müssten. Der Code würde bei unserer
Arbeit oder unserem Service so
ziemlich
genauso aussehen . Wenn es Ihre Funktion wäre, die wir uns
später im Kurs ansehen werden. Dann werden wir sehen, wie wir auch mit einer solchen
Situation
umgehen können . Lassen Sie uns also weitermachen und
testen, und ich werde einigen wichtigen Bereichen einige
Grenzwerte
festlegen. Dies dient nur dazu, dass wir genau verfolgen
können, was passiert, wenn das
Kabel durchläuft. Also werde ich sicherstellen
, dass die Konsole aktiviert ist, mein Standardprojekt ist, und mit dem Debugging fortfahren. Und wir haben die ersten
Breakpoints erreicht, sodass wir sicher sein
können, dass
das Q existiert. Und dann
springe ich einfach runter zur While-Schleife. Also ging es weiter und
holte die Grundstücke ab. Schauen wir uns dieses Objekt an
und wir sehen hier, dass der ungefähre
Nachrichtenkegel fünf ist. Aus diesem Grund
springen wir in unsere While-Schleife. Und dann werden wir weitermachen und die nächste Nachricht
abrufen. Und ich drücke einfach F5,
damit es nach unten springt. Lassen Sie uns das beurteilen. Zuerst erhielten wir eine Nachricht, nein, denn das sind Nachrichten, obwohl wir eine angeben, wird
sie immer noch
ein Array oder einen Sammlungstyp zurückgeben. Also wirklich und wahrhaftig, es wird
ein Array mit dieser
Anzahl von Nachrichten zurückgeben . Also bekommen wir in diesem Fall ein Array mit einer Nachricht, das ist in Ordnung. Wenn wir uns nun dieses
abgerufene Nachrichtenobjekt ansehen, werden
wir sehen, dass wir unseren Körper haben. Wir haben ein Dequeue-Kegel,
was bedeutet, wie oft
war diese Meldung rot? Wir haben ein Gültigkeitsdatum,
das auf den verschiedenen
Konfigurationen basiert , die wir eingerichtet hätten, und
wir haben Nachrichtentexte, also haben wir all
diese Eigenschaften dieses Nachrichtenobjekt, das
Warteschlangennachrichtenobjekt. Beachten Sie nun, dass der Körper eine kodierte Zeichenfolge
ist. Das ist es also, worüber
wir sprechen. Das macht für jeden Menschen keinen Sinn
,
es sei denn, Sie sind ein laufender Computer. Also werden wir das in
eine Zeichenfolge konvertieren und
es dann in ein Byte-Array konvertieren. Und dann konvertieren wir
aus
dem Byte-Array in
eine tatsächliche Zeichenfolge. Dann
löschen wir die Nachricht,
denn jetzt, wo wir die Nachricht
abgerufen haben, benötigen
wir
sie nicht mehr in der Warteschlange. Das ist also die Nachricht
, die der JSON-Text ist , über den wir gesprochen haben oder
den wir in der Vorschau gesehen haben. Jetzt können wir damit fortfahren
, es zu löschen. Und dann
wird die Nachricht zurückgegeben. Und ich drücke einfach
auf Weiter und entferne die Breakpoints ,
sodass alle Nachrichten auf der Konsole ausgedruckt
werden . Und hier habe ich eine Ausnahme.
19. Code-Bereinigung und Optimierung: In Ordnung, willkommen zurück Leute. In dieser Lektion werden wir
nur einige Codeoptimierungen vornehmen
und aufräumen. Und die erste
Slash-Cleanup-Aktivität für die Optimierung bringt uns direkt zurück zu der
Konsolen-App, die wir gerade erstellt haben. Also habe ich die
While-Schleife durch eine For-Loop
ersetzt. Da ich eine bestimmte
Anzahl von Nachrichten erhalte, ist es sinnvoll, sie einfach unterschiedlich
oft
durchzugehen , oder? Das wird uns also
definitiv helfen, diesen
Indexfehler zu überwinden, da wir erst so
weit gehen , wenn wir uns
innerhalb der Kegel befinden. Das ist also unser schneller Refactor. Natürlich gibt es
mehrere Möglichkeiten, dies zu
tun, und das war nur ein Irrtum, warum ich die
While-Schleife überhaupt gemacht habe. Hey, wir leben, wir lernen. Das ist also unsere erste Korrektur. Nein, ich möchte
meine Aufmerksamkeit wieder auf
das Webprojekt und
die Tatsache lenken , dass okay, wir hier die Speicher
- oder Doppelpunktzeichenfolge haben. Aber dann instanziieren
wir in unseren Diensten
wie Blob Storage, Queue Storage und
Table Storage jedes Mal einen
Client. Also können wir
das wahrscheinlich ein bisschen umgestalten. Lassen Sie uns also damit beginnen, ein neues Paket
zu besorgen. Und ich werde hier einfach
die Entwicklerkonsole verwenden hier einfach
die Entwicklerkonsole ,
damit wir alle
auf derselben Seite sind,
unabhängig davon, ob Sie Visual
Studio oder Visual Studio Code verwenden. Und im Webprojekt werde
ich dotnet add package hinzufügen. Und das Paket besteht aus Microsoft
Dot Extensions, die wie Ihre sind. Das gibt
uns nun die
Möglichkeit , in unsere program.cs überzugehen. Und während der Installation fange
ich an, den Code zu schreiben. Das gibt mir die
Möglichkeit, in die
program.cs zu gehen und einen
Builder zu sehen, der Dienste punktet, und sie als Ihre Dienste
oder Ihre Kunden hinzuzufügen. Dann kann ich
das mit einem Builder und
dem Lambda-Körper initialisieren und mit einem Semikolon beenden
. Also, was machen wir da
drin? Füge eine Nulldrüse hinzu. Nun, ich kann jetzt Builder sagen. Punkte, Kunden hinzufügen. Sie sehen also hier, nein, ich kann Blob Service Client hinzufügen, ich kann Warteschlangendienstpläne hinzufügen
und ich kann Table
Service Client hinzufügen, all das hier. Beginnen wir also einfach mit dem
Add Blob Service Client, und wir haben mehrere Überladungen. Die am einfachsten
zu verwendende Überlastung ist die die
eine
Verbindungszeichenfolge erforderlich ist. Also kann ich zur
Konfiguration springen und wir erhalten einfach diese Speicherverbindungszeichenfolge. Und wir gehen zur
Builder-Pot-Konfiguration. Ich habe meine Schreibweise nicht richtig verstanden. Konfigurationspunkte. Nun, das nicht. Erstellen Sie unsere Konfiguration. Und dann
ist der Schlüssel, nach dem
wir suchen , unsere
Speicherverbindungszeichenfolge. Jetzt, wo ich
diesen einen Ort
habe, kann ich ihn woanders wiederverwenden. Also builder dot add blob, service client, und ich
übergebe den Wert der
Verbindungszeichenfolge. Okay, ich kann auch bauen ihre Tochter
Kunden bedienen musste und wisst ihr was? Es braucht die
Verbindungszeichenfolge und weißt du was? Ich kann auch hinzufügen. Wenn
Sie Tabelle gesagt haben, dann haben Sie absolut Recht. Lassen Sie uns nun ein wenig auf den
Queue-Service-Client eingehen. Wenn wir
zum Warteschlangendienst wechseln,
denken Sie daran, dass wir beim
Erstellen eines neuen Clients einige Optionen hatten. Und dieser Optionsabschnitt enthielt die von uns gewünschte
Standardkodierung. Zurück in der Datei program.cs können
wir diese
Konfiguration also tatsächlich erweitern, indem am Ende dieser Zeile
Punktkonfigurationsoptionen
hinzufügen. Und dann
erstellen wir einen kleinen
Konfigurationskörper. Ich verwende nur C als
mein Lambda-Token. Dann stelle
ich in diesem
Konfigurationsabschnitt die
C-Punkt-Nachrichtencodierung so ein, dass
sie derselben Base-64-Codierung entspricht . Wisse, dass wir das
alles erledigt haben. Wir können
unsere bestehenden Dienste mithilfe
dieser Dienste erweitern, anstatt
sie im laufenden Betrieb bereitzustellen. Was wir also tun können, ist
mit dem Blob Storage-Client zu beginnen. Und was wir tun
werden, ist
den injizierten Service zu verwenden , um einen Container-Client zu
erhalten. Und wir müssen
diese Methode nicht jedes Mal aufrufen. Also werde ich
den Blob-Service-Client
in diesen Konstruktor injizieren den Blob-Service-Client und ein lokales Feld
initialisieren. Wir wissen bereits, wie das geht. Und wenn das injiziert
ist, kann
ich tatsächlich, anstatt zu sagen, dass der Var-Container unserem Gewicht entspricht, Blob-Container-Client
bekommen. Ich kann das tatsächlich durch
einen Blob Service Client Dot
Get Container Client ersetzen . Und das ist kein Waschbecken. Deshalb
bekommen wir diese rote Linie. In Ordnung? Und ich kann alle Instanzen dieser manuellen Methode durchgehen und
ersetzen , um
nur unseren Client zu verwenden. Und wenn ich möchte, kann
ich diese Methode löschen. Was ich
da für die Nachwelt belassen werde ,
damit wir sehen können,
was früher war. Wir haben die
Tabellenservice-Clients , die wir injizieren und initialisieren. Und dann können wir
unseren Weg, einen Tabellenclient zu bekommen, ersetzen. Ich kann es wissen, rufen Sie einfach
unter Service Client, get dot, get table client an. Und dann verweisen wir auf den Tabellennamen und nur auf Karton, der verschüttet wird. Da haben wir es. Also jetzt all diese Verweise, und das ist wahrscheinlich
eher
der Blob Storage
Client-Initialisierung ähnlich . Und es ist immer noch der
Queue-Speicher oder die Client-Initialisierung.
Also das ist in Ordnung. Und natürlich dient diese Methode
hier als Referenz. Ich habe sie alle durchgesehen und
ersetzt, aber ich wollte nur darauf
hinweisen, dass das, was wir hier nicht tun, darin besteht, etwas zu erschaffen,
wenn es nicht existiert. Es besteht also die Möglichkeit
, dass beim Abrufen des Clients Null zurückgegeben wird, weil er nicht existiert. Ein weiterer Faktor
hätte also sein können, dass
wir das einfach eliminieren und den Service-Client trotzdem auf der
Grundlage
dieses Anrufs
zurücksenden. Ordnung, wir
könnten also immer noch
den Methodenaufruf dazu beibehalten und den Client für
jeden Anruf
zurückgeben, oder? Oder für jede Methode.
Es liegt also an dir, oder? Wir hätten auch einfach
einen Tabellenclient hier oben
oder ein Feld oben definieren einen Tabellenclient hier oben können. Dann initialisieren wir das
Feld in unserem Konstruktor und dann verwenden wir einfach die Felder. Es gibt also mehrere
Möglichkeiten, dies zu tun. diesem Sinne werde
ich nun zur Datei program.cs
zurückkehren und uns einen anderen Weg
ansehen wir
das angehen könnten. Wir injizieren
hier den Client, den Service-Client. Und weil wir dann den Serviceplan einfügen,
müssen wir
eine neue Instanz des
eigentlichen Clients erstellen eine neue Instanz des , die uns
mit der Ressource verbindet. Was wäre, wenn wir
einfach
den direkten Kunden
für die Ressource registrieren wollten ? Wir müssten also
bei dem, einen etwas anderen Ansatz verfolgen was wir hier einfach selbst
machen,
einen etwas anderen Ansatz verfolgen. Und ich mache
es einfach in einer anderen Anzeige als Ihrem Kundenbereich. Nur damit wir zunächst einen Deal
haben können. In Ordnung? Nehmen wir also an, ich wollte direkt den
Queue-Client, nicht den Queue Service-Plan, nicht den Servicenamen,
sondern den eigentlichen Client. Ich würde eigentlich den
Builder Dot Add Client verwenden. Dann kann ich die Datentypen
angeben. Also möchte ich die Optionen Warteschlange, Client und Q haben. Und dann
initialisiere ich einen Delegaten mithilfe von Platzhaltern für die erwarteten
Parameter für diese Methode Wenn Sie den Mauszeiger über die AD-Anlage bewegen, sehen
Sie, wofür die Parameter entweder
stehen. Und dann verwenden wir
einen Lambda-Ausdruck
für unseren Objektkörper. Und dann wurde
erwartet, dass innerhalb
dieser Methode eine neue
Instanz von Q Client zurückgegeben wird. Das heißt, wenn ich zu
diesem Warteschlangendienst übergehe ,
wo wir
unsere Clients initialisiert
hätten . Ich könnte
diesen Code tatsächlich hier verwenden und einen neuen Client
zurückgeben, der
die Konfiguration oder
die
Speicherverbindungszeichenfolge verwendet . Ich könnte den Warteschlangennamen auch
in meine Konfiguration aufnehmen. Ich muss es also nicht
fest in der Datei codiert haben. Also lass uns das machen. Tatsächlich werde ich
einen ganz neuen Abschnitt in
der Konfiguration erstellen und
ihn als Ihren Speicher bezeichnen . Und ich werde die
Verbindungszeichenfolge dort einfügen. Und ich
nehme einfach das Wort Speicher
ist irgendwie überflüssig. Also jetzt der Schlüssel und
ich mache dasselbe, zur gleichen Zeit, weil ich
nicht vergessen will. Jetzt wäre der Schlüssel zur Konfiguration
für
die Verbindungszeichenfolge die Azure
Storage-Verbindungszeichenfolge mit Doppelpunkt, oder? Weil es jetzt in
diesem Unterabschnitt ist. Und ich mache das alles, nein. Also, das hat ein Komma dort gesetzt. Jetzt kann ich den
Warteschlangennamen oder mehrere Warteschlangennamen eingeben, unabhängig von den Q-Namen, die ich für meine Anwendung
benötige. Ich kann sie hier hinstellen. Der Name der Warteschlange
wird also lauten, sag es mir nicht, los
geht's. Ich auch dazu. Da haben wir es. Der Name der Warteschlange lautet also Teilnehmer-E-Mail-Stunde und ich verwende
einfach den Blob Storage. Ich habe nur die Schlüssel von
Null und Table Storage gesetzt. Weil diese Technik für
alle drei Speicherdienste verwendet werden
kann . Also zurück in der program.cs werde
ich eine schnelle
Anpassung vornehmen, da ich hier die
Konfigurationswerte benötige. Also ändere ich das
von Builder auf B und dann
wird der Queue-Name
geändert , die
Builder-Punkt-Konfiguration. Und dann können wir das
als Ihren Speicherbereich und
das als Schlüssel für den Warteschlangennamen bezeichnen. In Ordnung? Und natürlich müssen
wir zurückkehren. Dies müssen also
UQ-Clients mit all
diesen Werten zurückgegeben werden. Jetzt, wo wir diese Q-Clients im Warteschlangendienst
registriert haben , kann
ich wissen, dass dieser
Q-Client direkt injiziert wird. Ich benötige diesen direkten
Verweis auf den Queue-Namen nicht. Und ich kann diesen
süßen Kunden verwenden, um die gesamte Kommunikation
entsprechend zu erledigen. Also muss ich
das bei der Initialisierung innerhalb der gesendeten Nachricht oder innerhalb dieses Dienstes überhaupt nicht tun? Nein, ich kann etwas Ähnliches
für den Table Storage machen. Ich kann einfach diesen
Tabellennamen nehmen und wir können ihn in unseren
App-Einstellungs-JSON einfügen. Und dann kopiere
ich in unserer program.cs einfach
den Queue-Client und füge ihn in
denselben Abschnitt ein. Und wir werden einen Client für
Tabellenclients mit
Tabellen-Client-Optionen
hinzufügen . Und was wir hier tun, ist eine neue Instanz
des Tabellenclients mit
einer Speicherverbindungszeichenfolge
und unserem Azure
Storage Table Namen,
Schlüssel oder Table Storage
zurückzugeben einer Speicherverbindungszeichenfolge und unserem Azure
Storage Table Namen, . Tabelle, Name der Speichertabelle, wie auch immer Sie es
nennen, Tabellenspeicher. In Ordnung? Jetzt kann ich
diesen Tabellenclient
direkt in den
Tabellenspeicherdienst injizieren . Also, anstatt
den Service-Client zu injizieren , lassen Sie uns einfach beides machen. Also tabellarischer Client und ich
werden das initialisieren. Also lasse ich den ganzen Code
hier , damit Sie eine zukünftige
Referenz haben, oder? Es ist nicht unbedingt
so, dass Sie das alles
brauchen und ich denke, das wissen
wir inzwischen. Aber ich muss nicht jedes
Mal
einen Tabellenclient initialisieren , wenn ich einfach meinen eingefügten Dienst
verwenden kann , ähnlich wie wir es mit den Q-Clients tun
mussten. Jetzt kann ich den
Tabellenclient einfach direkt
über diese Codebasis ausführen. Das sind also nur einige
Optimierungen, die Sie an Ihrem Code vornehmen
können,
um sicherzustellen, dass ,
oh, nun, ich diesen nicht ändern
muss. Also wäre diese Methode
jetzt
sozusagen archiviert, oder? Dies sind also einige
Optimierungen und Bereinigungsaktivitäten, die
Sie aufgrund
einiger dieser fest codierten
Verweise auf die Konfiguration entfernen können. Und dann haben wir natürlich
die Tatsache besprochen , dass Sie
wahrscheinlich nicht all diese Schlüssel
in den App-Einstellungen
speichern möchten . Du könntest also tatsächlich Geheimnisse
gebrauchen. Und um Secrets zu verwenden, Sie einfach mit
der rechten Maustaste auf die CSP-Image-Datei und schon können Sie die Benutzergeheimnisse
verwalten. Und dann können Sie
diesen Abschnitt dort hinzufügen. Es ist also niemand, der in die Quellcodeverwaltung
eingecheckt wird,
und es ist für neugierige Blicke nicht sofort
sichtbar, aber es ist immer noch über unsere
Konfiguration in unserem Startup
zugänglich . Es gibt keinen Grund, warum ich
beim Schließen
keinen Blob-Client konfiguriere . Ich werde
unseren Blob-Client nicht konfigurieren. Denken Sie daran, dass
der Blob-Client anhand
des Knies direkt gegen den Blob
erstellt wird . Es ist zwar
etwas effizienter,
einfach weiterzumachen und
die Service Lanes zu injizieren. Wir müssen immer noch im
laufenden Betrieb einen Client
erstellen der auf dem Blob
basiert, der verarbeitet werden soll. Denn auch hier
wissen wir nicht, welcher Blob verarbeitet werden soll,
um damit zu beginnen. Sie können also überprüfen, ob dies Anreize sind und
dass diese
neuen Registrierungen funktionieren. Und ich werde nur einen von ihnen
kommentieren. Und das war's für diese Aktivität. Lassen Sie uns dieses Modul schließen.
20. Schlussbemerkung: Also haben wir eine weitere Maske getroffen, eine und wir haben dieses
Modul als Ihren Speicher abgeschlossen. Für die Dauer dieses Moduls haben wir uns mit der Erstellung und
Verwaltung eines Speicherkontos befasst. Dazu mussten wir mit
Blob Table und Queue
Storage Services
interagieren , alle Teil dieses
Speicherkontoangebots von Microsoft Azure sind. Wir haben uns angesehen, wie wir das Azure-Portal oder
den Speicherbrowser
verwenden können , den
wir auf
Ihren Computer herunterladen können, um
mit den verschiedenen Diensten zu interagieren. Noch einmal,
Blob-Tabelle, Queue-Speicher. Wir haben also gesehen, dass wir deren Inhalte
verwalten können, sei es über das Azure-Portal oder lokal mit dem
Speicherbrowser. Wir haben uns auch angesehen,
wie wir
eine Dotnet Core-Lösung für die
Verwendung des Speicherkontos entwickeln können . Also genau hier haben wir uns das Speichern
und Abrufen der
Verbindungszeichenfolge mit dem Speicher oder den
Kegeln für das
gesamte Wochenende
angesehen und Abrufen der
Verbindungszeichenfolge mit dem Speicher oder und Code geschrieben, um mit den
verschiedenen Diensten zu interagieren und die Nuance liegt dazwischen. Und letztendlich können wir es
alle darauf
ankommen , dass
jeder dieser Dienste über
RESTful-API-Aufrufe und -Kodierungen verwaltet
wird. Wir stellen lediglich
HTTP-Clients bereit , um mit
den zugrunde liegenden Diensten zu interagieren. Wir haben das Ganze auch abgerundet,
indem wir uns angesehen haben, wie wir die asynchrone
Kommunikation mithilfe von Warteschlangen ermöglichen
können. Und dadurch mussten wir so etwas wie
ein Pub-Sub-Pattern
implementieren , bei dem wir eine
Nachricht in der Warteschlange veröffentlichten. Und dann hatten wir
noch eine App, die die Warteschlange
abonniert hatte ,
die die Nachricht abholte, sie verarbeitete und weitermachte. Das ist also ein Beispiel für das Popup-Muster und wie wir asynchrone
Kommunikation implementieren
können. Ich danke Ihnen, dass Sie sich
mir an diesem Modul angeschlossen haben. Wir sehen uns in der nächsten Lektion.