Rubrik: Verschiedenes / Sonstiges | VB-Versionen: VB.NET | 17.09.07 |
Aufruf eines Webservices in einer Windows-Anwendung (VB.NET) Dieser Artikel beschreibt, wie man innerhalb einer Windows-Anwendung auf einen bestehenden Webservice zugreift. | ||
Autor: Carsten Stuplich | Bewertung: | Views: 32.983 |
ohne Homepage | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Dieser Artikel soll nicht beschreiben wie Sie einen Webservice unter .NET programmieren, sondern wie man auf einen bestehenden Webservice zugreift (für die Erstellung eines eigenen Webservices unter .NET finden Sie im Internet sehr viele Beiträge. Suchen Sie einfach nach "Webservice asp.net").
Beispiel-Webservice
Um Ihnen zu zeigen wie man in einer Windows-Anwendung (VB.NET) auf einen Webservice zugreift, hab ich mir in Visual Studio 2005 einen Webservice über die Vorlage "ASP.NET-Webdienstanwendung"
erstellt und nicht weiter angepasst, da diese Vorlage bereits eine Methode mit dem Namen "HelloWorld" bereitstellt und uns zum Austesten reicht.
Der Code der Serviceklasse Service1.asmx sieht wie folgt aus:
Imports System.Web.Services Imports System.Web.Services.Protocols Imports System.ComponentModel Imports System.Data.OleDb <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _ <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <ToolboxItem(False)> _ Public Class Service1 Inherits System.Web.Services.WebService <WebMethod()> _ Public Function HelloWorld() As String Return "Hello World" End Function End Class
1. Einbinden eines Webservices unter VB.NET
Damit Ihre Anwendung auf einen Webservice zugreifen kann, müssen sie als erstes einen s.g. "Webverweis" hinzufügen. Hierfür rufen Sie im Menü "Projekt > Webverweis hinzufügen…" auf. Daraufhin
öffnet sich ein Dialog, indem Sie die URL des Webservices (z.B. <http://servername/sasws/Service1.asmx>) bekannt geben und einen Namen für den Webservice (im Beispiel
"HalloWeltWebservice") vergeben.
Nachdem Sie auf den Button "Vereis hinzufügen" geklickt haben, steht Ihnen der Webservice in Ihrer Anwendung zur Verfügung und kann wie eine "normale" Klasse verwendet werden.
2. Beispiel-Code für Synchronen Aufruf eines Webservices
Folgender Code ist nötig um die Methode "HelloWorld" des o.g. Webservices synchron auszuführen.
Private Sub btnSynchron_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnSynchron.Click ' Objekt für Webservice "TestWebservice" erstellen Dim oTestWebservice As HalloWeltWebservice.Service1 = _ New HalloWeltWebservice.Service1 ' Standard-Authentifizierung für Webservice festlegen ' (ist nötig wenn im Webserver NT-Authentifizierung anstatt Anonym aktiviert ist) ' (Andernfalls tritt ein Fehler auf weil man nicht für den Zugriff berechtigt ist. oTestWebservice.Credentials = System.Net.CredentialCache.DefaultCredentials ' Synchroner Aurfurf der Methode "HelloWorld" in Webservice "TestWebservice" ' aufrufen und Rückgabewert per Messagebox ausgeben MsgBox(oTestWebservice.HelloWorld) End Sub
3. Beispiel-Code für Asynchronen Aufruf eines Webservices
Folgender Code ist nötig um die Methode "HelloWorld" des o.g. Webservices asynchron auszuführen.
Private Sub btnASynchron_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnASynchron.Click ' Objekt für Webservice "TestWebservice" erstellen Dim oTestWebservice As HalloWeltWebservice.Service1 _ = New HalloWeltWebservice.Service1 ' Standard-Authentifizierung für Webservice festlegen ' (ist nötig wenn im Webserver NT-Authentifizierung anstatt Anonym aktiviert ist) ' (Andernfalls tritt ein Fehler auf weil man nicht für den Zugriff berechtigt ist. ' Kann auskommentiert werden wenn nicht benötigt) oTestWebservice.Credentials = System.Net.CredentialCache.DefaultCredentials ' Asynchroner Aurfurf der Methode "HelloWorld" in Webservice "TestWebservice" ' aufrufen und Rückgabewert per Messagebox ausgeben oTestWebservice.HelloWorldAsync() AddHandler oTestWebservice.HelloWorldCompleted, _ AddressOf HalloWeltWebservice_HelloWorldCompleted End Sub
''' <summary> ''' Sub die ausgeführt wird wenn Methode "HelloWorld" in Webservice "TestWebservice" ''' durchgelaufen ist (bei asynchronem Aufruf der Methode "HelloWorld") ''' </summary> Private Sub HalloWeltWebservice_HelloWorldCompleted(ByVal sender As Object, _ ByVal e As HalloWeltWebservice.HelloWorldCompletedEventArgs) Dim sResult As String = e.Result MsgBox(sResult) End Sub
Anmerkung:
Über AddHandler beim Asynchronen-Aufruf wird bekanntgegeben, welche Sub ausgeführt werden soll, wenn die Methode "HelloWord" durchgelaufen ist.