VB.Net – WCF Dienst bzw. WCF Service entwickeln mit VB.Net inkl. kompletter Beispielklasse

Heute zeige ich Ihnen wie man einen WCF Dienst in VB.Net entwickelt. In diesem komplexen Beispiel werden Daten von einen SQL Server abgerufen. Als Paramerter wird eine Adressen-ID mit übergeben. Zurück kommt ein Datensatz falls vorhanden. Darüberhinaus werden Fehler und Zugriffe geloggt. Um einen WCF-Dienst zu testen erstellen Sie am besten noch eine Windows Anwendung die über Dienstverweise auf den WCF Dienst zugreift.

So wird es gemacht:

1. Neues Visual Studio Projekt erstellen

2. Der eigentliche WCF Dienst:

    '============================================
    ' VB.NET Beispiel in Visual Basic .Net
    ' © wilfried.bitz@bridgesolution.de
    '============================================
 
Option Explicit On
Option Strict On
 
Public Class Service1
    Implements IService1
 
    Private mstrModul As String = "Service1"
    Private mSQL As SqlStructure
 
    Public Structure SqlStructure
        Dim SqlKz As String
        Dim SqlPwd As String
        Dim SqlDB As String
        Dim SqlServer As String
    End Structure
 
    Public Sub New()
    End Sub
 
    Private Function GetData(ByVal value As Integer) As String Implements IService1.GetData
    End Function
 
    Private Function GetDataUsingDataContract(ByVal composite As CompositeType) As CompositeType Implements IService1.GetDataUsingDataContract
    End Function
 
    Public Function GetAdr3( _
        strAdrId As String) As CompositeType Implements IService1.Getadr3
        GetAdr3 = New CompositeType
 
        '------------------------------------
        Dim strProzedur As String = "GetAdr3()"
        Dim strMeldung As String = ""
        '------------------------------------
 
        Try
 
            '------------------------------------
            'Datenbank initialisieren
            Start_Init()
            '------------------------------------
 
            '------------------------------------
            'Sql Statement
            Dim strSQL As String = _
                "SELECT " & _
                "IDENT, PROJEKT, PLZ, ORT, STRASSE, LAND, ANREDE, VORNAME, " & _
                "NACHNAME, NAMENSZUSATZ "
            strSQL = strSQL & _
                "FROM ADRESSEN "
            Dim strWhereAnd As String = " WHERE "
            If strAdrId <> "" Then
                strSQL = strSQL & strWhereAnd & _
                    "IDENT = " & strAdrId & " "
                strWhereAnd = " AND "
            End If
            Dim myDV As DataView = SQL_DV_Init(strSQL, mSQL)
            If myDV.Count <> 0 Then
                strMeldung = "OK"
                GetAdr3.IDENT = CInt(CONV_NN(myDV(0).Item("IDENT")))
                GetAdr3.PROJEKT = CInt(CONV_NN(myDV(0).Item("PROJEKT")))
                GetAdr3.PLZ = CStr(CONV_NS(myDV(0).Item("PLZ")))
                GetAdr3.ORT = CStr(CONV_NS(myDV(0).Item("ORT")))
                GetAdr3.STRASSE = CStr(CONV_NS(myDV(0).Item("STRASSE")))
                GetAdr3.LAND = CStr(CONV_NS(myDV(0).Item("LAND")))
                GetAdr3.ANREDE = CStr(CONV_NS(myDV(0).Item("ANREDE")))
                GetAdr3.VORNAME = CStr(CONV_NS(myDV(0).Item("VORNAME")))
                GetAdr3.NACHNAME = CStr(CONV_NS(myDV(0).Item("NACHNAME")))
                GetAdr3.NAMENSZUSATZ = CStr(CONV_NS(myDV(0).Item("NAMENSZUSATZ")))
                GetAdr3.SYSTEM_MELDUNG = strMeldung
            Else
                strMeldung = "KEIN DATENSATZ GEFUNDEN"
                GetAdr3.SYSTEM_MELDUNG = strMeldung
            End If
            '------------------------------------
 
        Catch ex As Exception
            '------------------------------------
            GetAdr3.SYSTEM_MELDUNG = "GetAdr3() - ERROR: " & ex.Message
            ERROR_LOG(ex.Message, mstrModul, strProzedur)
            '------------------------------------
 
        Finally
            '------------------------------------
            Log_GetAdr(strAdrId, strTransaktionNr, strIbanNr, strMeldung)
            '------------------------------------
 
        End Try
 
    End Function
 
    '============================================
    ' VB.NET Beispiel in Visual Basic .Net
    ' © wilfried.bitz@bridgesolution.de
    '============================================
    Private Sub Log_GetAdr( _
        strAdrId As String, _
        strTransaktionNr As String, _
        strIBAN As String, _
        strMeldung As String)
 
        '----------------------------------------
        Dim strProzedur As String = "Log_GetAdr()"
        Dim strSQL As String = ""
        Dim intCount As Integer
        '----------------------------------------
 
        Try
            '------------------------------------
            strSQL = "INSERT INTO ABRUF_LOG (" & _
                         "ADRIDENT, " & _
                         "MELDUNG, " & _
                          "VERSION, " & _
                         "INSERTUSER , " & _
                         "INSERTDATE  ) " & _
                         "VALUES (" & _
                         "" & strAdrId & " , " & _
                          "'" & strMeldung & "' , " & _
                         "'" & gStrAppVersion & "' , " & _
                         "'" & "SYSTEM" & "' , " & _
                         "getdate()" & ")"
            intCount = SQL_ExecuteNonQuery(strSQL, mSQL)
            '------------------------------------
 
        Catch ex As Exception
            '------------------------------------
            ERROR_LOG(ex.Message, mstrModul, strProzedur)
            '------------------------------------
 
        End Try
 
    End Sub
 
    '============================================
    ' VB.NET Beispiel in Visual Basic .Net
    ' © wilfried.bitz@bridgesolution.de
    '============================================
    Private Sub ERROR_LOG( _
        ByVal strMessage As String, _
        ByVal strModul As String, _
        ByVal strProzedur As String)
 
        '----------------------------------------
        Dim strSQL As String = ""
        Dim intCount As Integer
        '----------------------------------------
 
        Try
 
            '------------------------------------
            strSQL = "INSERT INTO ERROR_LOG (" & _
                         "ERR_MESSAGE, " & _
                         "MODUL, " & _
                         "PROZEDUR, " & _
                         "INSERTUSER , " & _
                         "INSERTDATE  ) " & _
                         "VALUES (" & _
                         "'" & strMessage & "' , " & _
                         "'" & strModul & "' , " & _
                         "'" & strProzedur & "' , " & _
                         "'" & "SYSTEM" & "' , " & _
                         "getdate()" & ")"
            intCount = SQL_ExecuteNonQuery(strSQL, mSQL)
            '------------------------------------
 
        Catch ex As Exception
 
        End Try
 
    End Sub
 
    '============================================
    ' VB.NET Beispiel in Visual Basic .Net
    ' © wilfried.bitz@bridgesolution.de
    '============================================
    Private Sub Start_Init()
 
        Try
 
            'SQL Datenbank initialiseren
           '------------------------------------
            With mSQL
                .SqlKz = INI_Read("SQL", "SqlKz", strAppIniPath & "system.ini")
                .SqlPwd = CONV_PW_Read(INI_Read("SQL", "SqlPwd", strAppIniPath & "system.ini"))
                .SqlServer = INI_Read("SQL", "SqlServer", strAppIniPath & "system.ini")
                .SqlDB = INI_Read("SQL", "SqlDB", strAppIniPath & "system.ini")
            End With
            '------------------------------------
 
 
        Catch ex As Exception
        End Try
 
    End Sub
 
End Class

3. Die Schnittstellen Klasse des WCF Diensts:

' HINWEIS: Mit dem Befehl "Umbenennen" im Kontextmenü können Sie den Schnittstellennamen "IService1" sowohl im Code als auch in der Konfigurationsdatei ändern.
<ServiceContract()>
Public Interface IService1
 
    <OperationContract()>
    Function GetData(ByVal value As Integer) As String
 
    <OperationContract()>
    Function GetDataUsingDataContract(ByVal composite As CompositeType) As CompositeType
 
    <OperationContract()>
    Function Getadr3(strAdrId As String) As CompositeType 'As List(Of String)
 
 
End Interface
 
' Verwenden Sie einen Datenvertrag, wie im folgenden Beispiel dargestellt, um Dienstvorgängen zusammengesetzte Typen hinzuzufügen.
 
<DataContract()>
Public Class CompositeType
 
    <DataMember()>
    Public Property BoolValue() As Boolean
 
    <DataMember()>
    Public Property StringValue() As String
 
    <DataMember()>
    Public Property IDENT() As Integer
 
    <DataMember()>
    Public Property PROJEKT() As Integer
 
    <DataMember()>
    Public Property PLZ() As String
 
    <DataMember()>
    Public Property ORT() As String
 
    <DataMember()>
    Public Property STRASSE() As String
 
    <DataMember()>
    Public Property LAND() As String
 
    <DataMember()>
    Public Property ANREDE() As String
 
    <DataMember()>
    Public Property VORNAME() As String
 
    <DataMember()>
    Public Property NACHNAME() As String
 
    <DataMember()>
    Public Property NAMENSZUSATZ() As String
 
    <DataMember()>
    Public Property SYSTEM_MELDUNG() As String
 
End Class

Spendierst du mir eine Tasse Kaffee? Ich würd mich riesig freuen. DANKE !! 🙂


Schreibe einen Kommentar

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