Webservices nutzen

English! place to talk about development, programming and coding
Post Reply
adrian_meier
Znuny newbie
Posts: 1
Joined: 16 Jul 2007, 20:15

Webservices nutzen

Post by adrian_meier »

Hallo

So, wie in allen Beschreibungen ersichtlich ist, kann OTRS über WebServices angesprochen werden. Die rpc.pl und rpc-examples.pl Dateien sind auch auffindbar. Was ist jedoch zu tun, wenn das System über .Net angesprochen werden soll. Gibt es ein WSDL-File?

Gruss, Adrian
Sid
Znuny newbie
Posts: 27
Joined: 27 Aug 2007, 13:50

Webservices nutzen

Post by Sid »

Das ganze nutzt einfach nur SOAP, dafür gibt es sichet .net Bindings.. einfach mal bei google danach suchen, findet man leicht was
jan
Znuny newbie
Posts: 1
Joined: 18 Aug 2008, 11:25

Webservices nutzen

Post by jan »

Hallo adrian_meier

Ich wollte OTRS auch über .NET ansprechen und habe mir deshalb selber eine WSDL gebastelt. Auf Google bin ich nämlich nicht fündig geworden.

Ich bin aber auf zwei Probleme gestossen, wodurch untenstehende WSDL nicht funktionert:
  • Teilweise gibt SOAP eine Zahl zurück (Beispiel Ticket-Nummer) und gibt an, dass das ein Integer sei. Die Zahl überschreitet aber den zugelassenen Bereich eines Interger, was im .NET-Client dann zu einer Exception führt. Im WSDL kann ich als Rückgabewert irgendetwas angeben (Integer, Long, AnyType etc.) aber alles führt zur gleichen Exception
  • Der Name des Rückgabewerts setzt sich zusammen aus "s-gensym" und einer Laufnummer. Somit kann der Name in der WSDL nicht angegeben werden.
Für beide Probleme habe ich keine befriedigende Lösung gefunden. Momentan verfahre ich so, dass ich meinen SOAP-Request von Hand zusammenstelle, dann einen HttpWebRequest ausführe und das erhaltene Ergebnis via XmlReader selber auslese.

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://new.webservice.namespace" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://new.webservice.namespace">
	<wsdl:types>
		<xs:schema targetNamespace="http://new.webservice.namespace" elementFormDefault="qualified"/>
	</wsdl:types>
	<wsdl:message name="NewMessageRequest">
		<wsdl:part name="User" type="xs:string"/>
		<wsdl:part name="Password" type="xs:string"/>
		<wsdl:part name="Object" type="xs:string"/>
		<wsdl:part name="Method" type="xs:string"/>
		<wsdl:part name="TicketId" type="xs:int"/>
	</wsdl:message>
	<wsdl:message name="NewMessageResponse">
		<wsdl:part name="s-gensym0" type="xs:anyType"/>
	</wsdl:message>
	<wsdl:message name="NewMessage"/>
	<wsdl:portType name="MyPort">
		<wsdl:operation name="Dispatch">
			<wsdl:input message="tns:NewMessageRequest"/>
			<wsdl:output message="tns:NewMessageResponse"/>
		</wsdl:operation>
	</wsdl:portType>
	<wsdl:binding name="NewBinding" type="tns:MyPort">
		<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
		<wsdl:operation name="Dispatch">
			<soap:operation soapAction="/Core#Dispatch" style="rpc"/>
			<wsdl:input>
				<soap:body use="encoded" namespace="/Core"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="encoded" namespace="/Core" wsdl:required="true"/>
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	<wsdl:service name="NewService">
		<wsdl:port name="OTRS" binding="tns:NewBinding">
			<soap:address location="http://HOST/otrs/rpc.pl"/>
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>
hakre
Znuny newbie
Posts: 11
Joined: 14 Aug 2008, 17:39

Webservices nutzen

Post by hakre »

Es kann per SOAP mit OTRS kommuniziert werden. WSDL wird dabei nicht unterstützt. Dafür kann mit jedem SOAP Request auf den gesamten Funktionsumfang des OTRS-Programmes (Perl Klassen) zurückgegriffen werden.

Dabei ist der Zugriff so gedacht, das von Perl aus mit der gleichen SOAP Klasse auf OTRS zugegriffen wird (SOAP::Lite). Sollte dies nicht in Frage kommen, weil zB. Java, PHP oder .Net eingesetzt wird, so kann man einfach SOAP Aufrufe an OTRS schicken und dann mit den Antwortdaten umgehen.

Dies erfordert mehr Aufwand als beim Zugriff mit einer WSDL, allerdings werden auch nur einfache Datentypen eingesetzt sodass technisch Betrachtet da auch nicht so viel Aufwand nötig ist.

Neben der Problematik das OTRS SOAP keine WSDL bereitstellt hat sich für mich noch das Problem ergeben, dass die Schnitstelle von OTRS das XML nicht dekodiert. D.h. die wesentlichen Entities die die eigene SOAP Klasse in Strings zB. encodiert werden von Seiten OTRS erstmal nicht dekodiert. So ergibt es sich, das die Spitzen Klammern als < und > in den OTRS Daten landen. Dem kann aber abgeholfen werden, im Thread "SOAP Decoding Probleme bei Emailadressen u.ä." steht wie..

Noch ein Tipp für die Erfolgreiche Nutzung der SOAP Schnittstelle. Sie schreibt nämlich Fehlermeldungen in die Log Datei von OTRS. Dies sollte helfen, die ersten Hürden bei der Nutzung zu nehmen.
Post Reply