myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Netzwerktechnologien » SOAP 1.2 Request
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

SOAP 1.2 Request

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
ziggyyy
myCSharp.de-Mitglied

Dabei seit: 21.02.2013
Beiträge: 5
Entwicklungsumgebung: Visual Studio 2005


ziggyyy ist offline

SOAP 1.2 Request

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo liebe Community,

ich arbeite derzeit an einem umfangreichen Projekt. Ein Ticketsystem hat eine Soap 1.2 API und darüber können Supporttickets angelegt werden. Warum der ganze Spaß? Eine Automatisierung soll her. Nun bin ich recht neu im Bereich C# und SOAP 1.2.

ich erzeuge erstmal eine XML Datei.

C#-Code:
private void create_Incident(string computer_idn, string swidn_choice, string swName_choice)
    {
        XmlDocument xmldoc = new XmlDocument();
        XmlNode newRoot, newNode, newSubNode;

        // Root
        newRoot = xmldoc.CreateElement("vorfall");
        xmldoc.AppendChild(newRoot);

        // Childs
        newNode = xmldoc.CreateElement("msg_id");
        newNode.InnerText = "" + computer_idn + "_" + swidn_choice + "";
        newRoot.AppendChild(newNode);

        newNode = xmldoc.CreateElement("contact");
        newRoot.AppendChild(newNode);

        newSubNode = xmldoc.CreateElement("employee_id");
        newSubNode.InnerText = "" + windows_user + "";
        newNode.AppendChild(newSubNode);

        newNode = xmldoc.CreateElement("status");
        newNode.InnerText = "In Progress";
        newRoot.AppendChild(newNode);

        newNode = xmldoc.CreateElement("state");
        newNode.InnerText = "Unassigned";
        newRoot.AppendChild(newNode);

        newNode = xmldoc.CreateElement("impact");
        newNode.InnerText = "Low";
        newRoot.AppendChild(newNode);

        newNode = xmldoc.CreateElement("urgency");
        newNode.InnerText = "Middle";
        newRoot.AppendChild(newNode);

        newNode = xmldoc.CreateElement("it_short_desc");
        newNode.InnerText = "Software Deployment";
        newRoot.AppendChild(newNode);

        newNode = xmldoc.CreateElement("type");
        newNode.InnerText = "Service Request";
        newRoot.AppendChild(newNode);

        newNode = xmldoc.CreateElement("service");
        newNode.InnerText = "NOT DETERMINDED";
        newRoot.AppendChild(newNode);

        newNode = xmldoc.CreateElement("inquiry_txt");
        newNode.InnerText = "Installation der Software '" + swName_choice + "' auf '" + IV_Number + "'";
        newRoot.AppendChild(newNode);

        newNode = xmldoc.CreateElement("source");
        newNode.InnerText = "Interface";
        newRoot.AppendChild(newNode);

        xmldoc.Save(@"C:\Test_XML\" + computer_idn + "_" + swidn_choice + ".xml");

    }

Nun weiß ich leider nicht, wie ich das schöne Ding an den Server sende. :/

Ich weiß, dass es ein httpwebrequest eine Sache wäre, die funktionieren kann. Finde aber im Internet gefühlte 1. Mio. andere Ansätze.

XML-Code:
POST /iapi/API.asmx HTTP/1.1
Host: host1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <Tsystem_InsertIncidentXML xmlns="http://test1.com/webservices/">
      <userName>string</userName>
      <xml>string</xml>
    </Tsystem_InsertIncidentXML>
  </soap12:Body>
</soap12:Envelope>

Laut Doku ist der Username der Name, mit dem ich Tickets im Supportsystem aufmachen kann. Der XML String soll wohl die XML Datei sein, die ich erzeugt habe.

Das System hinterlegt nach Bearbeitungszeit eine Responsedatei mit der eindeutigen msg_id aus der XML, die die Ticketdaten hält. Mit der msg_id soll ich dann die Response XML vom Ticketsystem ansprechen können.
Dort ist in der Doku ebenfalls etwas hinterlegt.

XML-Code:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <Tsystem_InsertIncidentXMLResponse xmlns="http://test1.com/webservices/">
      <Tsystem_InsertIncidentXMLResult>int</REMEDY_InsertIncidentXMLResult>
      <msg>string</msg>
    </Tsystem_InsertIncidentXMLResponse>
  </soap12:Body>
</soap12:Envelope>

Kann mir jemand etwas helfen? :/

LG
Ziggy

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ziggyyy am 21.02.2013 13:12.

Neuer Beitrag 21.02.2013 13:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.176
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

...warum baust Du die XML per Hand und lässt Dir nicht einfach ein C# Objekt nach SOAP serialisieren?
Dafür gibts sogar fertige Frameworkmethoden. Man muss nur in die Doku schauen.

Aber selbst das muss man nicht selbst machen, wenn man einfach die in .NET bereits existierenden SOAP-Schnittstellen nutzt; sowohl fürs Senden wie auch fürs Empfangen.
Google-Suche: "c# soap" => About 8,530,000 results (0.15 seconds) und gleich der erste Treffer verweist auf passendes Beispiel und die Doku.

PS: in der Forenbeschreibung steht, dass SOAP ein Netzwerkthema und kein Web-Thema ist. Daher in die korrekte Kategorie verschoben.
Möchte Dich an  [Hinweis] Wie poste ich richtig? 1.1 und 2.1 erinnern bzw aufmerksam machen.
Neuer Beitrag 21.02.2013 13:21 Beiträge des Benutzers | zu Buddylist hinzufügen
ziggyyy
myCSharp.de-Mitglied

Dabei seit: 21.02.2013
Beiträge: 5
Entwicklungsumgebung: Visual Studio 2005

Themenstarter Thema begonnen von ziggyyy

ziggyyy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Neuer Beitrag 21.02.2013 13:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ziggyyy
myCSharp.de-Mitglied

Dabei seit: 21.02.2013
Beiträge: 5
Entwicklungsumgebung: Visual Studio 2005

Themenstarter Thema begonnen von ziggyyy

ziggyyy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ich bin froh, dass ich es bis hierhin geschafft habe :O jetzt kommst du mit sowas an...bin komplett überfordert. :(
Neuer Beitrag 21.02.2013 14:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ziggyyy
myCSharp.de-Mitglied

Dabei seit: 21.02.2013
Beiträge: 5
Entwicklungsumgebung: Visual Studio 2005

Themenstarter Thema begonnen von ziggyyy

ziggyyy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Kann ich das ganze auch mit XElementen lösen?
 http://msdn.microsoft.com/de-de/library/...o/bb387089.aspx
Ich finde nur nichts wie man das dann an den Server sendet?!

Habe irgendwo im Laufe meiner Recherche etwas gefunden, dass man den httpwebrequest ein String mit dem kompletten soap Inhalt gibt und der den dann an den Server sendet. Frage ist auch, muss ich im Soap den String "xml" als String dort reinschreiben? Oder den Link zur XML Datei, oder ohne String und gleich den Inhalt der XML dort reinschreiben. Tappe noch echt im dunkeln...

Ich verstehe auch irgendwie nicht, warum ich eine XML in einer XML verschicken muss. Was ergibt das denn für ein Sinn?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ziggyyy am 21.02.2013 15:39.

Neuer Beitrag 21.02.2013 15:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.176
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dann lies das Thema SOAP mit C# richtig durch und dann verstehst Du das auch.
Das geht nicht innerhalb einer Stunde. Da wundert mich nicht, dass Du a) SOAP nicht verstehst und b) überfordert bist. Daraus resultiert dann Dein Vorgehen, das einfach mehr als suboptimal ist.

Schaus Dir einfach an und lern es. Das können und werden wir Dir einfach nich abnehmen können.
Gibt zig Tutorials und Dokumentationen. Google liefert hunderte Treffer!

Natürlich kannst Du alles auch anders lösen. Natürlich kannst Du auch auf der Autobahn joggen. Inwiefern das alles sinnvoll ist und dann auch noch sicher ist ne völlig andere Sache.

SOAP ist nen festes Protokoll.
Mach Dir die Mühe und stells mit XElement nach (Hilfe:  http://soapclient.com/standards.html und  http://www.w3.org/TR/2000/NOTE-SOAP-20000508/) oder lerns und verwend Framework-Methoden.
Neuer Beitrag 22.02.2013 00:00 Beiträge des Benutzers | zu Buddylist hinzufügen
ziggyyy
myCSharp.de-Mitglied

Dabei seit: 21.02.2013
Beiträge: 5
Entwicklungsumgebung: Visual Studio 2005

Themenstarter Thema begonnen von ziggyyy

ziggyyy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ok ich habe jetzt einen XMLWriter genommen, der mir immer einen userabhängigen String baut.

C#-Code:
    private void create_Incident(string computer_idn, string swidn_choice, string swName_choice, string CI_Number, string windows_user)
    {
        StringBuilder sb = new StringBuilder();
        using (XmlWriter xmlWriter = XmlWriter.Create(sb))
        {
            xmlWriter.WriteStartDocument();
                xmlWriter.WriteStartElement("incident");
                    xmlWriter.WriteStartElement("msg_id", "" + computer_idn + "_" + swidn_choice + "");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("contact");
                    xmlWriter.WriteElementString("employee_id", "" + windows_user + "");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("status", "In Progress");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("state", "Unassigned");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("impact", "5 - BAU");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("urgency", "3 - BAU");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("it_short_desc", "Test: BISS – Software Deployment");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("type", "User Service Request");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("service", "NOT DETERMINDED");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("inquiry_txt", "Test: Installation der Software " + swName_choice + " auf " + CI_Number + "");
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("source", "Interface");
                    xmlWriter.WriteEndElement();
                xmlWriter.WriteEndElement();
            xmlWriter.WriteEndDocument();
            xmlWriter.Close();
        }
        sb.ToString();

        string username = "BISS";
        string strReq = @"<?xml version=" + "1.0" + " encoding=" + "utf-8" + "?><soap12:Envelope xmlns:xsi=" + "http://www.w3.org/2001/XMLSchema-instance" + " xmlns:xsd=" + "http://www.w3.org/2001/XMLSchema" + " xmlns:soap12=" + "http://www.w3.org/2003/05/soap-envelope" + "><soap12:Body><REMEDY_InsertIncidentXML xmlns=" + "http://test.com/webservices/" + "><userName>" + username + "</userName><xml>" + sb + "</xml></REMEDY_InsertIncidentXML></soap12:Body></soap12:Envelope>";

        HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://servertest/api/");
        req.Method = "POST";
        req.ContentType = "application/soap+xml; charset=utf-8";
        UTF8Encoding encoding = new UTF8Encoding();
        byte[] postBytes = encoding.GetBytes(strReq);
        req.ContentLength = postBytes.Length;

        Stream postStream = req.GetRequestStream();
        postStream.Write(postBytes,0,postBytes.Length);
        postStream.Close();

        HttpWebResponse reqResponse = (HttpWebResponse) req.GetResponse();
        Stream responseStream = reqResponse.GetResponseStream();
        StreamReader reader = new StreamReader(responseStream);
        String strRes = reader.ReadToEnd();

        Console.WriteLine("Response: "+strRes);
        reqResponse.Close();

    }

Mein String, den ich in die SoapXML übergebe sieht jetzt nur etwas komisch aus:

XML-Code:
<?xml version=1.0 encoding=utf-8?>
<soap12:Envelope xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:soap12=http://www.w3.org/2003/05/soap-envelope>
    <soap12:Body>
        <REMEDY_InsertIncidentXML xmlns=http://test.com/webservices/>
        <userName>BISS</userName>
        <xml><?xml version=\"1.0\" encoding=\"utf-16\"?><incident><msg_id xmlns=\"50889_227\" /><contact><employee_id>fischem</employee_id></contact><status xmlns=\"In Progress\" /><state xmlns=\"Unassigned\" /><impact xmlns=\"5 - BAU\" /><urgency xmlns=\"3 - BAU\" /><it_short_desc xmlns=\"Test: BISS – Software Deployment\" /><type xmlns=\"User Service Request\" /><service xmlns=\"NOT DETERMINDED\" /><inquiry_txt xmlns=\"Test: Installation der Software !!!OLD!!! Kyocera KyoLocalAgent 1.3.8 auf 306524\" /><source xmlns=\"Interface\" /></incident></xml></REMEDY_InsertIncidentXML>
    </soap12:Body>
</soap12:Envelope>"

die Backslahs gehören da vermutlich nicht rein? Oder interpretiert der Server das richtig?
Ich habe gelesen, dass der Host im http header geschützt ist. Muss ich den mitgeben?

UPDATE:
wenn der strReq String erzeugt wird, baut er die backslashes ein. Woran liegt das?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ziggyyy am 22.02.2013 14:03.

Neuer Beitrag 22.02.2013 13:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 6 Jahre.
Der letzte Beitrag ist älter als 6 Jahre.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 17.11.2019 18:02