Ich verwende einen SOAP-Webservice von unserem Ticketsystem OTRS. Der Webservice steht also nicht wirklich unter meiner Kontrolle. Die Anfrage funktioniert gut, aber ich bekomme nie eine Antwort in meinem Code. Die Antwort ist immer null. (var response = client.SessionCreate(session);
) Das seltsame Ding ist, dass wireshark und die Webservice-Konsole dieses Ticketsystems sagen, dass ich eine gültige Antwort erhalten sollte. Da ich sehr neu in diesem Webservice bin, habe ich absolut keine Ahnung, wo ich in diesem Fall anfangen soll. Also hier ist eine Beschreibung von dem, was ich getan habe. Jeder Vorschlag wird sehr geschätzt.WCF Webservice gibt immer null zurück
Zuerst erstellte ich ein normales C# -Projekt und fügte die WSDL-Datei hinzu, die nur auf der GitHub-Website des OTRS-Projekts zu finden ist. Ich habe es als Service-Referenz hinzugefügt und dann meinen C# -Code hinzugefügt, der so aussieht.
// Für Debug System.Net.ServicePointManager.Expect100Continue = false; Thread.CurrentThread.CurrentUICulture = new CultureInfo ("en-us");
try
{
OTRS.OTRS_Error err = new OTRS.OTRS_Error();
OTRS.GenericTicketConnector_PortTypeClient client = new OTRS.GenericTicketConnector_PortTypeClient("GenericTicketConnector_Port");
OTRS.SessionCreate session = new OTRS.SessionCreate();
session.Item = "someUserNameGoesHere";
session.ItemElementName = OTRS.ItemChoiceType8.UserLogin;
session.Password = "SomePasswordGoesHere";
var response = client.SessionCreate(session);
Console.WriteLine(response.SessionID);
Console.WriteLine(response.Error);
}
catch (Exception exep)
{
Console.WriteLine(exep.Message);
Console.WriteLine(exep.InnerException);
}
finally
{
Console.ReadLine();
}
Eingehende Nachricht an server
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://www.otrs.org/TicketConnector/SessionCreate</a:Action>
<a:MessageID>urn:uuid:14750529-3de2-4618-8db4-8ac18b681c18</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">http://SomeServer/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnector</a:To>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SessionCreate xmlns="http://www.otrs.org/TicketConnector/">
<UserLogin xmlns="">someUserName</UserLogin>
<Password xmlns="">somePassword</Password>
</SessionCreate>
</s:Body>
Abgehende Nachricht an server
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:soapenc="http://www.w3.org/2003/05/soap-encoding"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<SessionCreateResponse xmlns="http://www.otrs.org/TicketConnector/">
<SessionID>SomeSessionID</SessionID>
</SessionCreateResponse>
</soap:Body>
</soap:Envelope>
Wireshark HTTP/XML-Paket vom Server zu meinen Klienten geht
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:soapenc="http://www.w3.org/2003/05/soap-encoding"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<SessionCreateResponse xmlns="http://www.otrs.org/TicketConnector/">
<SessionID>SomeSessionID</SessionID>
</SessionCreateResponse>
</soap:Body>
</soap:Envelope>
Refernce.cs https://gist.github.com/HansVader/1ba3847d918ee15ef16703c8ada6c9bf
WSDL https://gist.github.com/HansVader/dd849e49f4a1584397cd21b0e430b301
ich zur Zeit nur die SessionnCreate und TicketUpdate Funktion benötigen. Die anderen Operationen sind zu diesem Zeitpunkt irrelevant. Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.
Update:
Hier sind die Spuren aus dem Trace-Tool wie yildizm85 vorgeschlagen in den Kommentaren:
Ich denke, es ist auch erwähnenswert, dass ich die refernce.cs
erstellt durch Ich selbst mit dem svcutil
Werkzeug, weil ich ein Problem mit dem IsWrapped hatte. Werfen Sie einen Blick auf diese Frage und Antwort: XmlSerializer attribute not valid in Web Service using WCF
Haben Sie die WCF-Ablaufverfolgung versucht? https://msdn.microsoft.com/en-us/library/ms751526.aspx –
Es sieht aus wie die Nachricht, die Sie senden, ist korrekt, und die Nachricht, die Sie zurück erhalten. Ich habe die Namespaces ein wenig überprüft und es sieht auf den ersten Blick gut aus. Die Deserialisierung scheint jedoch nicht zu funktionieren, daher wird wahrscheinlich etwas aus der WSDL falsch generiert oder die WSDL ist falsch. Haben Sie versucht, die Service-Referenz mehrmals hinzuzufügen (Hinzufügen und Löschen) oder etwas in Referenz.cs geändert? – Cosmin
Ich schlage vor, Sie betrachten ServiceStack.net - wirklich gute Web-Service-Bibliothek. Sie haben eine ältere Open-Source-Version am Ende ihrer Download-Seite. –