Laden...

.NET Service erstellen, welcher eienn Aufruf einen Java aufruf entgegen nimmt.

Erstellt von YLIREBUS vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.940 Views
YLIREBUS Themenstarter:in
56 Beiträge seit 2006
vor 9 Jahren
.NET Service erstellen, welcher eienn Aufruf einen Java aufruf entgegen nimmt.

Hallo zusammen,

es gibt einen Aufruf aus Java z.B.

http://test/WebserviceName
dieser ruft eine Action auf holeDokument.

Der Request sieht folgender maßen aus:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:arc="http://irgendwas/holeDokument">
   <soap:Header/>
   <soap:Body>
      <arc:holeDokumentFiles>
         <Request>
            <DocumentId>dokID1</DocumentId>
         </Request>
      </arc:holeDokumentFiles>
   </soap:Body>
</soap:Envelope>

Nun habe ich einen Webservice geschrieben, welcher das Dokument zurückgeben soll.
Dieser heißt in .NET :

holeDokument**.asmx**

Wie bekomme ich es hin, daß mein Webservice wie oben aufgerufen werden kann.

  1. Versuch:
    Ermöglicht, das das Dokument aufgerufen wird auch ohne die Endung
<webServices>
      <protocols>
        <add name="HttpSoap" />
		<add name="HttpGet" />
		<add name="HttpPost" />
      </protocols>
    </webServices>
<system.webServer>
    <defaultDocument>
      <files>
               
        <add value="holeDokument.asmx" />
      </files>

Wenn ich jetzt den Aufruf tätige, bekomme ich folgende Meldung:

System.Web.Services.Protocols.SoapException: Die Anforderung kann ohne gültigen action-Parameter nicht behandelt werden. Geben Sie ein gültiges SOAPAction-Objekt an.
bei System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()
bei System.Web.Services.Protocols.SoapServerProtocol.Initialize()
bei System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean&amp; abortProcessing)</soap:Text>

Meine Funktion in C# sieht so aus:


 [WebMethod]
        public XmlDocument retrieveDocumentFiles(string DocumentId)
        {

            XNamespace soap = "http://www.w3.org/2003/05/soap-envelope";
            XNamespace arc = "http://irgendwas/holeDokument";
            XElement root = new XElement(soap + "Envelope",
                new XAttribute(XNamespace.Xmlns + "soap", soap.NamespaceName),
                new XAttribute(XNamespace.Xmlns + "arc", arc.NamespaceName),
                new XElement(soap + "Header"),
                new XElement(soap + "Body",
                 new XElement(arc + "holeDokumentFiles", 
                     new XElement("DocumentFiles", 
                         new XElement("DocumentFile", 
                             new XElement("Name", "cd3.d3l"), 
                             new XElement("FileData", "77u/T3B0aW9uIGV4c=="))))
                     )
                
                );

           
            var xmlDocument = new XmlDocument();
            using (var xmlReader = root.CreateReader())
            {
                xmlDocument.Load(xmlReader);
            }

            //StringWriter sw = new StringWriter();
            //XmlTextWriter xw = new XmlTextWriter(sw);
            //xmlDocument.WriteTo(xw);
            //return sw.ToString();

            return xmlDocument;
  }

Kann mir jemand sagen was ich falsch mache bzw. machen muß?

Danke im Voraus!

Ylirebus

Die Bugs verhalten sich proportional zu den Codezeilen und nehmen exponential zu.(Ich bin nicht doof, ich denke nur anders. 😉)
Ich fühle mich als wäre ich diagonal in einem Paralleluniversum abgestellt worden.

A
350 Beiträge seit 2010
vor 9 Jahren

Doof Frage :

Warum nutzt du nicht WCF welches von Haus aus SOAP 1.1 und 1.2 macht ?

Damit würdest du den ganzen "händischen Kram" weglassen, welcher sowieso nicht sauber ist.

16.840 Beiträge seit 2008
vor 9 Jahren

Bist Du gezwungen SOAP zu nehmen? Ist nicht gerade die beste Technologie für den Datenaustausch zwischen fremden Technologien.
RESTful Services auf Basis von Json sind da eher geeignet.

Ansonsten stimm ich Ahrimaan zu. Wozu SOAP selbst (fehlerhaft) zusammen bauen?

YLIREBUS Themenstarter:in
56 Beiträge seit 2006
vor 9 Jahren

@Ahrimaan Weil ich es nicht besser wusste 😉.

An der aufrufenden Technologie kann ich nichts ändern.

Ich darf nun nur etwas etwickeln das auf den Aufruf s.o. die entsprechende Antwort gibt.

dann schaue ich mir nun mal WCF SOAP an ...

Die Bugs verhalten sich proportional zu den Codezeilen und nehmen exponential zu.(Ich bin nicht doof, ich denke nur anders. 😉)
Ich fühle mich als wäre ich diagonal in einem Paralleluniversum abgestellt worden.