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