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.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Implementierung von B2B Web Services: Toms Anwendung

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *