Kommunikation mit CS 2.0-WCF-Diensten
Dieses Muster beschreibt, wie ein CS 2.0-Webservice aufgerufen werden kann.
Design
Der Aufruf eines synchronen Service erfolgt wie folgt: Generiert wird ein ServiceClient und alle Datenverträge durch Hinzufügen eines "Dienstverweises" mit dem Visual Studio. Unter Zuhilfenahme der Endpunktverwaltung wird der Host ermittelt, auf dem CS 2.0 gehostet ist.
Implementierung
- Zunächst muss die WSDL von einem Schleupen.CS 3.0-System heruntergeladen werden: Hierzu im IIS der Service auswählen und die vollständige URL bestimmen: http://localhost/Schleupen/CS.VA/Vertrag/VertragService.svc
Dann diese per Browser aufrufen und die WSDL herunterladen: - Diese WSDL nun in der Solution im Projekt "Gateways.Contracts" ablegen.
- Sigento.Pure als benutzerdefiniertes Tool der WSDL anschließen:
- Implementierung einer ServiceClientFactory:
public interface IVAVertragServiceClientFactory { IVAVertragServiceClient CreateClient(); }
public class VAVertragServiceClientFactory : IVAVertragServiceClientFactory { private readonly IBrokerClientConfiguration brokerClientConfiguration; private readonly IResolveEndpointActivityServiceGateway resolveEndpointActivityServiceGateway; public VAVertragServiceClientFactory( IBrokerClientConfiguration brokerClientConfiguration, IResolveEndpointActivityServiceGateway resolveEndpointActivityServiceGateway) { this.brokerClientConfiguration = brokerClientConfiguration ?? throw new ArgumentNullException(nameof(brokerClientConfiguration)); this.resolveEndpointActivityServiceGateway = resolveEndpointActivityServiceGateway ?? throw new ArgumentNullException(nameof(resolveEndpointActivityServiceGateway)); } public IVAVertragServiceClient CreateClient() { EndpointAddress applikationServerAdresse = resolveEndpointActivityServiceGateway.ErmittleApplikationsserverAdresse(); string uri = $"{applikationServerAdresse}/CS.VA/Vertrag/VertragService.svc"; return new VAVertragServiceClient( brokerClientConfiguration.GetBinding(Uri.UriSchemeHttp), new EndpointAddress(uri)); } }
Das
IResolveEndpointActivityServiceGateway
wird wie gewohnt implementiert, siehe Gateway zu entfernten Objekten. - Aufruf im Gateway:
string sessionXml = legacySessionXmlFactory.CreateSessionXml(sessionTokenProvider.Token); QueryVertragResponse response; using IVAVertragServiceClient client = clientFactory.CreateClient(); QueryVertragRequest request = ... request.SessionXml = sessionXml; response = client.QueryVertrag(request);