Ich habe einen einfachen wcf-Dienst erstellt, der eine GetData-Methode bereitstellt. Es ist eigentlich die Vorlage, die erstellt wird, wenn Sie ein neues wcf-Projekt erstellen.
Ich habe die Anwendung zum iis-Server hinzugefügt, so dass sie von außen zugänglich ist, etwa so: http://192.168.0.100/TFSWrapper/Service1.svc
Ich habe einen generischen Soap-Client verwendet, um eine Anfrage an die GetData-Methode zu senden. Dies ist die Soap-Anfrage, die erzeugt wurde:
<?xml version="1.0" encoding="utf-16"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetData xmlns="http://tempuri.org/" />
</soap:Body>
</soap:Envelope>
Hier ist die Antwort der Seife:
<?xml version="1.0" encoding="utf-16"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetDataResponse xmlns="http://tempuri.org/">
<GetDataResult>You entered: 87</GetDataResult>
</GetDataResponse>
</s:Body>
</s:Envelope>
Übrigens habe ich den Parameter aus der Methode entfernt und einen Rückgabewert hartcodiert.
Wie Sie sehen können, funktioniert alles wie es soll.
Als nächstes habe ich einen Titanium-Client erstellt, der denselben Dienst aufruft. Um sicherzugehen, habe ich genau die gleiche Soap-Anfrage wie oben verwendet.
Im Grunde habe ich Folgendes getan:
var s='<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetData xmlns="http://tempuri.org/" /></soap:Body></soap:Envelope>';
//xhr.send(config.envelopeBegin+body+config.envelopeEnd);
xhr.send(s);
Wenn diese Nachricht gesendet wird, sendet der Server eine "500 internal server error"-Antwort zusammen mit dem folgenden Fehlerstring zurück:
Die Nachricht mit der Aktion 'http://tempuri.org/GetData' kann nicht beim Empfänger verarbeitet werden, da der ContractFilter beim EndpointDispatcher. Dies kann entweder auf eine Vertragsfehlanpassung zurückzuführen sein (nicht übereinstimmende Aktionen zwischen Absender und Empfänger) oder eine Bindung/Sicherheits Unstimmigkeit zwischen Sender und Empfänger. Prüfen Sie, ob Sender und Empfänger denselben Vertrag und dieselbe Bindung haben (einschließlich Sicherheitsanforderungen, z. B. Message, Transport, None).
Zuerst habe ich die Titanium soap api verwendet, um die Anfrage xml zu erstellen, aber ich bekam den gleichen Fehler. Ich dachte, es war ein Problem mit, wie das erstellt wird, so dass das ist, warum ich hart-codiert eine Anforderung (das funktioniert), aber immer noch kein Glück.