Laden...

Mit plain SOAP-Messages auf Webservices zugreifen

Erstellt von mosspower vor 14 Jahren Letzter Beitrag vor 14 Jahren 886 Views
mosspower Themenstarter:in
456 Beiträge seit 2007
vor 14 Jahren
Mit plain SOAP-Messages auf Webservices zugreifen

Hallo,

ein Anbieter stellt einen Webservice zur Verfügung, den er komplett in Java programmiert hat. Wäre alles doll und gut, wenn er sich an Standards gehalten hätte.

Leider hat er Apache/Axis-Datentypen verwendet, die mittels .NET nicht aufgelöst werden können. Somit wurde ein Java-Client programmiert um das Teil schnell und dirty produktiv nutzen zu können.

Jetzt geht es an die Optimierung und dafür bin dann wohl ich zuständig 😁

Wir haben (fast) alles mittels C# programmiert und optimal wäre es, wenn auch der Aufruf mittels einen C#-Programm gelingen könnte. Nun dachte ich, dass es doch eine Lösung geben muss, und zwar mit plain SOAP-Messages, denn der Client auf unterster Ebene schickt ja nur XML an den Server und der wieder XML zurück.

Imo muss es doch gehen, wenn der C#-Client eine fertige SOAP-Message an den Java-Server schickt und dieser schickt ja auch nur plain SOAP-Messages zurück. die dann eben auf einer anderen Ebene nicht auf die generierten Objekte reflektiert werden sollen, sondern soz. selbst ausgewertet werden.

Nun habe ich aber nichts im Web gefunden diesbezüglich. Auch bekomme ich es nicht einmal hin, ein "stink normalen WCF-Service" mittels SOAP-Messages aufzurufen.

Kann mir da jemand helfen, bzw. hat hier jewmand Links für mich zum Einlesen?

Danke schon mal für etwaige Antworten im Voraus.

C
12 Beiträge seit 2006
vor 14 Jahren

Warum greifst du nicht via Webclient auf den service zu und schickst entsprechend per Post den SOAP Envelope mit?

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 14 Jahren

@chillimix,

genau das wollte ich ja machen und hatte es nicht hinbekommen.
Nun bin ich aber erst mal soweit, dass es mit einem WCF-Host klappt.

Für alle, die es interessiert, der Quellcode sieht so aus:


WebClient webClient = new WebClient();
String soap = File.ReadAllText(@"C:/soap-request.xml");
webClient.Headers.Add("Content-Type", "text/xml;charset=utf-8");
webClient.Headers.Add("SOAPAction", "http://tempuri.org/IContractor/SayHello");
String response = webClient.UploadString("http://localhost:8000/WCFTest", soap);

Also, bin ein bißchen weiter und habe heute auch noch gesehen, dass bei dem AXIS-SOAP-Service auch noch Attachments drinnen sind. Naja, ich hoffe, dass ich das irgendswie hinbekomme.

Hier noch das manuell erstellte Request-Envelope:


<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:SayHello>
         <tem:name>franconian_dude</tem:name>
      </tem:SayHello>
   </soapenv:Body>
</soapenv:Envelope>

Und das vom WCF-Host generierte Response-Envelope:


<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header><ActivityId CorrelationId="7ab76409-1bb2-4431-bb89-fc7fbfafe639" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">17e7a2d8-3562-4b6d-b22b-c58b7c30301a</ActivityId></s:Header>
    <s:Body>
      <SayHelloResponse xmlns="http://tempuri.org/"><SayHelloResult>Hello my friend, franconian_dude</SayHelloResult>
      </SayHelloResponse>
    </s:Body>
</s:Envelope>