Work in Progress
Diese Seite ist aktuell im Review! Die Seite wurde noch nicht qualitätsgesichert und kann Fehler enthalten.
Die verlinkten Seiten sind ggf. nur für Schleupen-Mitarbeiter sichtbar.

Kommunikation mit WCF-Diensten

Dieses Dokument beschreibt das Erstellen und den Nutzen von Klassen für die Kommunikation mit Services die mit Hife von Kamoto erstellt wurden.

Design

Kamoto generiert die, für den Aufruf notwendigen, C#-Typen. Zur weiteren Nutzung wird die Klasse IClientConfiguration per DI angeschlossen, um die zu nutzenden ServiceClients bzgl. URI und Binding einfach konfigurieren zu können.

Implementierung

Aufruf eines synchronen Service (über den Broker)

Ein synchroner Service-Aufruf (EntiyService, ActivityService, QueryService etc.) erfolgt wie in folgendem Codebeispiel zu sehen:

IBuecherAusleihenActivityServiceClientFactory serviceClientFactory = ...
using IBuecherAusleihenActivityServiceClient serviceClient = serviceClientFactory.Create();

try
{
    ExecuteRequest request = ...
    ExecuteResponse respons = serviceClient.Execute(...);
}
finally
{
    serviceClient.CloseSafely();
}

Dabei erfolgt der Aufruf über den sogenannten BrokerService, der an den eigentlichen Endpunkt delegiert.

Zur Konfiguration des Service-Clients wird eine Implementierung von IBrokerClientConfiguration injiziert, die insbesondere die Methoden GetDefaultBinding() und GetDefaultEndpointAddress() bereitstellt. Aufgerufen wird intern im Standard der Endpunkt net.tcp:localhost/Schleupen/Service Bus/Broker/BrokerService.svc.

Aufruf eines Oneway Service (über den Broker)

OneWayServices (in der Regel ein ActivityService) werden wie folgt aufgerufen:

IBuecherAusleihenOptimierenActivityServiceClientFactory serviceClientFactory = ...
using (IBuecherAusleihenOptimierenActivityServiceClient serviceClient = serviceClientFactory.Create());

try
{
    ExecuteRequest request = ...
    serviceClient.Execute(...);
}
finally
{
    serviceClient.CloseSafely();
}

Hierbei ist nur garantiert, dass der Aufruf erfolgreich gestartet wird.

Zur Konfiguration des Service-Clients wird eine Implementierung von IOneWayBrokerClientConfiguration injiziert, die insbesondere die Methoden GetDefaultBinding() und GetDefaultEndpointAddress() bereitstellt. Aufgerufen wird intern im Standard der Endpunkt net.tcp:localhost/Schleupen/Service Bus/Broker/OneWayBrokerService.svc.

Aufruf eines asynchronen Service (über den Broker)

Der Aufruf von ProcesServices oder ActivityServices, die als Workflow implementiert sind, zeigt folgendes Code-Beispiel:

IBuecherAusleihenProcessServiceClientFactory serviceClientFactory = ...
using (IBuecherAusleihenProcessServiceClient serviceClient = serviceClientFactory.Create()) ;

try
{
    ExecuteRequest request = ...
    serviceClient.Execute(...);
}
finally
{
    serviceClient.CloseSafely();
}

Hierbei ist sichergestellt, dass die Übergabe des Requests an das Workflow-System erfolgreich war. Ansonsten erhält der Aufrufer einen Fehler.

Zur Konfiguration des Service-Clients wird eine Implementierung von IBrokerClientConfiguration injiziert, die insbesondere die Methoden GetDefaultBinding() und GetDefaultEndpointAddress() bereitstellt. Aufgerufen wird intern im Standard der Endpunkt net.tcp:localhost/Schleupen/Service Bus/Broker/BrokerService.svc.

Äquivalent werden auch QueuedServices aufgerufen! Siehe auch Command Services / Queued Services

Aufruf per Request-Reply (über den Broker)

Dieses Verfahren ist derzeit lediglich als Anschluss im Webmodeler sinnvoll unterstützt!

Manuell ist dies nur mit erheblichem Aufwand möglich, da hierzu zum einen Queues und die ansynchrone Schnittstelle in Form einer WSDL generiert werden muss. Zudem muss eine Callback-Schnittstelle angegeben werden. Siehe hierzu http://wi/doku.php?id=longrunningservices.

Zur Konfiguration des Service-Clients wird eine Implementierung von IBrokerClientConfiguration injiziert, die insbesondere die Methoden GetDefaultBinding() und GetDefaultEndpointAddress() bereitstellt. Aufgerufen wird intern im Standard der Endpunkt net.tcp:localhost/Schleupen/Service Bus/Broker/BrokerService.svc.

Auslösen eines Events (über den Broker)

Ein Event wird ausgelöst, indem ein Service aufgerufen wird. Jeder Subscriber ist dann eine Serviceimplementierung dieser Schnittstelle. Der Aufruf für das Auslösen eines Events sieht dann wie folgt aus:

IBuchUpdatedEventServiceClientFactory serviceClientFactory = ...
using (IBuchUpdatedEventServiceClient serviceClient = serviceClientFactory.Create()) ;

try
{
    serviceClient.Raised(new RaisedNotification(...));
}
finally
{
    serviceClient.CloseSafely();
}

Hierbei ist sichergestellt, dass die Übergabe des Requests an das Queuing-System erfolgreich war. Ansonsten erhält der Aufrufer einen Fehler.

Zur Konfiguration des Service-Clients wird eine Implementierung von IEventPublisherConfiguration injiziert, die insbesondere die Methoden GetDefaultBinding() und GetDefaultEndpointAddress() bereitstellt. Aufgerufen wird intern im Standard der Endpunkt net.tcp:localhost/Schleupen/Service Bus/MessageBus/BusinessEvents/BusinessEventPublishingService.svc.

Aufruf eines Service über den WCF Test Client

Für den Aufruf über den Broker mittels WCF-Testclient muss zunächst die WSDL ermittelt werden. Dies erfolgt über den sogenannten MetadataActivityService. In der WSDL wird dann der Aufruf über den BrokerService umgebogen. Die WSDL kann wie folgt abgerufen werden:

http://localhost/Schleupen/Service Bus/Broker/MetadataActivityService.svc/<Service_Id>

http://localhost/Schleupen/Service Bus/Broker/MetadataActivityService.svc/Schleupen.CS.MDM.MWM.Lastgaenge.LastgangAuswertenActivityService_3.1

Die Service-Id ist hierbei Schleupen.CS.MDM.MWM.Lastgaenge.LastgangAuswertenActivityService_3.1

Standardmäßig enthalten die vom MetadataActivityService zurückgegebenen WSDLs nur Service-Endpunkte für die Protokoll http und net.tcp. Um auch die Endpunkte für https zu ergänzen, muss der GET-Parameter addHttps mit dem Wert true an der URL ergänzt werden, z.B.:

http://localhost/Schleupen/Service Bus/Broker/MetadataActivityService.svc/Schleupen.CS.MDM.MWM.Lastgaenge.LastgangAuswertenActivityService_3.1?addHttps=true

Mithilfe des Cmdlets Request-SessionToken -ViewName Standard -ElementName Lieferant -ElementTypeName Mandant | clip kann man ein SessionToken in die Zwischenablage legen und somit im WCF Test Client verwenden.

Timeouts
Cookie Consent mit Real Cookie Banner