Implementierung von B2B Web Services: Toms Anwendung

Wenn man sich die ConfirmOrder() Web-Methode einmal näher betrachtet, wird man feststellen, dass einige im Namensraum System.Threading befindliche Threading-Klassen verwendet werden, und zwar die Klassen ThreadPool und AutoResetEvent.

Als Erstes muss der Benachrichtigungsvorgang erstellt werden. Diese Klasse gehört in die verwendete Utility-Komponente. Mit der rechten Maustaste auf das Projekt WSB2BUtil klicken und eine Klasse namens EmailUtil.vb (siehe Listing J) hinzufügen.

Diese Klasse benutzt grundlegende SMTP-Funktionalitäten, um E-Mail-Nachrichten zu versenden. Um diese Funktionalitäten dynamisch zu gestalten, muss man die folgenden beiden neuen Schlüssel zur Datei Web.config hinzufügen:

Diese Werte werden von der E-Mail-Klasse gelesen und als Einstellungen für die MailMessage()-Klasse verwendet. Diese Klasse gehört zum im .NET-Framework enthaltenen Namensraum System.Web.Mail, der einen bequemen Zugriff auf SMTP-Funktionen bietet, ohne diese erst selbst erstellen zu müssen.

Das Problem an dieser asynchronen Verfahrensweise ist, dass man keine Parameter an die asynchronen Methoden weitergeben kann. Die Methoden müssen eine spezifische Signatur besitzen. Sie müssen „void“ oder „subs“ ohne Ausgabewerte darstellen und sie müssen einen als Typ „object“ definierten Parameter besitzen. Dieser Objekt-Parameter ist eine Instanz der Klasse AutoResetEvent, mit deren Hilfe ein innerhalb der hier eingesetzten Anwendung erstellter neuer Thread generiert und freigegeben werden kann.

Nun soll der Aufruf der E-Mail-Komponente in Listing K genauer untersucht werden.

Zunächst wird eine Instanz der EmailUtil-Klasse instantiiert, wobei der Konstruktor verwendet wird, um alle zu der von den Klassenmethoden versendeten E-Mail gehörenden Daten weiterzugeben. Diese Daten werden auf interne Klasseneigenschaften gesetzt und später von den Benachrichtigungsmethoden gelesen. Die Daten stammen aus einem Datensatz in einem with-Block, was auch erklärt, weshalb .item()-Code-Elemente vorhanden sind.

Anschließend wird eine AutoResetEvent-Klasse initiiert, um zwischen signalisierten und nicht signalisierten Pending-Threads zu unterscheiden. Schließlich erzeugt man einen Aufruf an die statische Methode QueueUserWorkItem der ThreadPool-Klasse, wodurch ein neuer Methoden-Aufruf in den Thread-Pool zur Verarbeitung gesetzt wird. Man gibt die Adresse der aufzurufenden Methode weiter, in diesem Fall SendCompletedOrderConfirmation und die Instanz der AutoResetEvent-Klasse.

In der eigentlichen Benachrichtigungsmethode erstellt man eine neue SMTP-Nachricht und versendet diese wie jede gewöhnliche Methode. Allerdings muss man einen finally-Block hinzufügen, den Objekt-Parameter an eine AutoResetEvent-Klasse zurückgeben und die Set()-Methode aufrufen, damit der Thread-Pool weiß, dass dieser Prozess abgeschlossen ist. All dies erfolgt asynchron ohne Unterbrechung der Ausführung des Hauptanwendungs-Threads.

Page: 1 2 3 4 5

ZDNet.de Redaktion

Recent Posts

Apple stellt iPhone 16 und iPhone 16 Pro vor

Der neue Apple-Prozessor A18 basiert auf einem 3-Nanometer-Verfahren. Apple verspricht mehr Leistung und eine höhere…

1 Woche ago

Neue Version der Mac-Malware Atomic Stealer im Umlauf

Die stiehlt Daten aus weiteren Browsers. Zudem steigt die Zahl der Browser-Erweiterungen, die Atomic Stealer…

1 Woche ago

Aktualisiertes Arsenal von APT41: DodgeBox und Moonwalk

Der bis dato unbekannte Loader DodgeBox zeigt auffällige Ähnlichkeiten mit StealthVector, warnen Zscaler-Experten.

1 Woche ago

OpenAI meldet eine Million zahlende Business-Nutzer für ChatGPT

In fünf Monaten kommen rund 400.000 neue Nutzer hinzu. Die meisten zahlenden Nutzer hat ChatGPT…

1 Woche ago

Gaming-bezogene Phishing-Attacken um 30 Prozent gestiegen

Über drei Millionen Angriffsversuche unter Deckmantel von Minecraft / YouTube-Star Mr. Beast als prominenter Köder

2 Wochen ago

KI erleichtert Truckern die Parkplatzsuche

Die Prognose für die Anfahrt bezieht das Verkehrsaufkommen, die Stellplatzverfügbarkeit sowie die Lenk- und Ruhezeiten…

2 Wochen ago