Table of Contents

WebHttp

Informationen

  • Kategorien: Kernel | Webservice (Server)
  • Version: EA.13683
  • Veröffentlichungsdatum: Mittwoch, 31. Juli 2019
  • Entwickler: Schulze
  • Benötigt Datenbankänderung: Nein
  • Betreff: WebHttp

Beschreibung

Damit der Webservice mit JSON statt mit SOAP arbeitet, gab es bisher in der pit-Registrierung am Webservice-Eintrag den Schalter EnableWebScript=TRUE. Intern wird das umgesetzt indem in .NET ein WebInvokeAttribute für die Webservice-Methoden und das WebScriptEnablingBehavior für den Webservice-Endpunkt benutzt wird.

Statt WebScriptEnablingBehavior gibt es inzwischen in .NET das aktuellere WebHttpBehavior, welches neben JSON auch XLM kann. Die Verwendung der .NET-Klasse WebHttpBehavior und damit die Verwendung von WebHttp im Webservice wurde jetzt im IS-Service ermöglicht. Eingeschaltet wird dies in der pit-Registrierung unter External/Webservices/ mit dem Schalter EnableWebHttp=TRUE.

Wenn EnableWebHttp eingeschaltet ist, dann stehen in der pit-Registrierung am Webservice-Knoten noch 2 weitere Schalter zur Verfügung:

  • WebHttpBodyStyle=Wrapped/WrappedRequest/WrappedResponse -> optional, damit wird gesteuert ob die Aufrufparameter bzw. der Rückgabewert in einen Namen (Aufrufparametername bzw. Funktionsname+Result) eingeschlossen werden Standard ist Bare (kein Wrapping)

  • WebHttpMessageFormat=XML/XMLRequest/XMLResponse -> optional, damit wird gesteuert ob statt JSON das Format XML im Request bzw. Response verwendet wird Standard ist JSON

Die Werte der Schalter werden beim Starten des Webservices in der Konsole bzw. in der Ereignisanzeige angezeigt.

Außerdem gibt es im WebHttp-Modus auch noch eine automatisch zur Laufzeit von .NET zur Verfügung gestellte Hilfeseite zu allen Funktionen des Webservices. Für den pit-IS-Standard-Webservice PitIS.Web.Service.Model gibt es auch kurze Erläuterungen zu jeder Funktion. Erreichbar ist die Hilfeseite unter http://<webservice-address/Help.

Beispielcode

Beispiel Aufruf GetInterfaceVersion

- der Aufruf geschieht durch http://<hostname>:<port>/adress/<funktionname>
  z.B. http://localhost:8080/pitis/model/GetInterfaceVersion

Die Hilfeseite wäre in dem Beispiel erreichbar unter http://localhost:8080/pitis/model/help, dort gibt es automatisch für jede Webservice-Funktion Beispiel-Aufrufe und -Antworten (funktioniert nur mit WebHttpBodyStyle=Bare, nicht mit den Wrapped-Varianten!).

- die Aufrufdaten (JSON bzw. XML) werden via HTTP mit POST übergeben, die Rückgabedaten stehen ebenso in POST zur Verfügung

=> JSON-Response mit EnableWebScript=TRUE (alte Variante, nur zum Vergleich)
{
	'd': {
		'__type': 'GetInterfaceVersionResponse:#PitIS.Web.Service.DataDefinition',
		'Result': {
			'__type': 'Version:#PitFM.Model',
			'Build': 0,
			'Major': 1,
			'Minor': 1,
			'Revision': 0,
			'VersionDescription': null
		}
	}
}

=> mit EnableWebHttp=TRUE (neu)
{
	'Result': {
		'Build': 0,
		'Major': 1,
		'Minor': 1,
		'Revision': 0,
		'VersionDescription': null
	}
}

=> mit EnableWebHttp=TRUE und WebHttpBodyStyle=Wrapped
{
	'GetInterfaceVersionResult': {
		'Result': {
			'Build': 0,
			'Major': 1,
			'Minor': 1,
			'Revision': 0,
			'VersionDescription': null
		}
	}
}

=> mit EnableWebHttp=TRUE und WebHttpMessageFormat=XML
<GetInterfaceVersionResponse xmlns='http://schemas.datacontract.org/2004/07/PitIS.Web.Service.DataDefinition' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
	<Result xmlns:a='http://schemas.datacontract.org/2004/07/PitFM.Model'>
		<a:Build>0</a:Build>
		<a:Major>1</a:Major>
		<a:Minor>1</a:Minor>
		<a:Revision>0</a:Revision>
		<a:VersionDescription i:nil='true'/>
	</Result>
</GetInterfaceVersionResponse>