none
Mehrfacher Zugriff auf ein und denselben WCF-Service RRS feed

  • Frage

  • Hallo zusammen,

    ich habe in VB.NET einen WCF-Service erstellt (mit ServiceContract (Interface), konkreter Klasse, die dieses Interface implementiert und einer Web.Config) , der auf einem externen IIS gehostet wird. Grundsätzlich funktioniert auch alles, d.h. ich kann innerhalb meiner Anwendung auf die Methoden des WCF-Service zugreifen.

    Hier ein kleiner Abriss des Dienstes:

    Das Interface

    <ServiceContract()>
    Public Interface IemmbeeService
        <OperationContract>
        Sub AddPanelPlatform(panelPlatform As IPanelPlatform)
    
        <OperationContract>
        Function GetServiceId As Guid
    
        ... weitere Methoden
    End Interface
    


    Die Implementierung

    Public Class emmbeeService
        Implements IemmbeeService
    
        Private _serviceId As Guid
    
        Public Sub New()
            _serviceId = Guid.NewGuid
        End Sub
    
        Public Sub AddPanelPlatform(panelPlatform As IPanelPlatform) Implements IemmbeeService.AddPanelPlatform
                PanelPlatforms.Add(panelPlatform)
        End Sub
    
       Public Function GetServiceId As Guid Implements IemmbeeService.GetServiceId
            Return _serviceId
       End Function
    
       ... weitere Methoden und Properties (u.a. "PanelPlatforms")
    End Class

    Der Zugriff auf WCF-Service erfolgt so:

    Public Function GetemmbeeService(endpoint As String) As emmbeeService
        Try
            Dim es As IemmbeeService
            es = ChannelFactory(Of IemmbeeService).CreateChannel(New BasicHttpBinding(), New EndpointAddress(New Uri(endpoint)))
            Return es
        Catch ex As Exception
            Throw ex
        End Try
    End Function
    So weit, so gut.

    Den Dienst möchte ich u.a. auch zum Datenaustausch nutzen. So soll die Anwendung z.B. an einer bestimmten Stelle mittels der Methode AddPanelPlatform Elemente hinzufügen, die an anderer Stelle (auch von Instanzen der Anwendung auf anderen Rechnern) abgefragt werden.

    Als ich das probiert habe, stellte ich fest, dass das Hinzufügen der Elemente zwar problemlos funktioniert, beim Abfragen dieser an anderer Stelle jedoch kein Ergebnis zurück kommt - der Rückgabewert ist Nothing.

    Wie oben zu sehen ist, verfügt der WCF-Service über eine Methode GetServiceId. Die ServiceId wird im Konstruktor erzeugt und nirgendwo sonst geändert, d.h. der Service müsste immer dieselbe ServiceId liefern.

    Wenn ich allerdings folgende Programmzeilen ausführe:

    Dim abc As Guid = emmbeeService.GetServiceId Dim def As Guid = emmbeeService.GetServiceId Dim ghi As Guid = emmbeeService.GetServiceId

    erhalte ich drei verschiedene Guids. Es sieht also so aus, als ob der Dienst drei mal neu initialisiert und dabei jedes Mal der Konstruktor aufgerufen wird.

    Mache ich da irgendwas falsch oder verstehe ich den WCF-Service nicht? Was ich erreichen will, ist, immer auf ein und denselben WCF-Service zuzugreifen. Die ChannelFactory-Anweisung wird definitiv nur einmal ausgeführt.

    Vielen Dank für Eure Hilfe.

    Michael

    Freitag, 11. Mai 2018 13:47

Antworten