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

Bedrohungsindex: Deutliche Zunahme von Infostealern im Oktober

Dazu trägt unter der Infostealer Lumma-Stealer bei. Hierzulande dominiert der Infostealer Formbook die Malware-Landschaft.

1 Woche ago

Chrome 131 schließt zwölf Sicherheitslücken

Eine schwerwiegende Anfälligkeit hebelt die Sicherheitsfunktion Seitenisolierung auf. Betroffen sind Chrome für Windows, macOS und…

1 Woche ago

DeepL Voice mit KI für Sprach- übersetzungen

DeepL Voice ermöglicht Live‑Übersetzung von Meetings und Gesprächen in 13 Sprachen.

1 Woche ago

November-Patchday: Microsoft schließt Zero-Day-Lücken in Windows

Betroffen sind Windows und Windows Server. Microsoft patcht aber auch Schwachstellen in Excel, Word und…

1 Woche ago

LG zeigt elastisches OLED-Display

Es lässt sich um bis zu 50 Prozent dehnen. Allerdings besitzt es eine deutliche geringere…

1 Woche ago

BSI zu Cybersicherheit: Bedrohungslage bleibt angespannt

Allerdings nimmt auch die Resilienz gegenüber Cyberattacken zu. Das BSI hat außerdem die Cybersicherheit anstehender…

1 Woche ago