SOAP Webservice von VB aufrufen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Dome_2001.

    SOAP Webservice von VB aufrufen

    Hallo Community,

    ich bin gerade dabei mich in VB .Net einzuarbeiten. Bin also echter Frischling in dem Gebiet. Aktuell stehe ich vor der Herausforderung das ich einen SOAP Webservice per VB aufrufen will und dann die Response verarbeiten will.

    Was ich mir schon zusammen gesucht habe ist folgendes:
    - Ich bekomme über Datenquellen - Dienste den Webservice in VS integriert
    - Ich verstehe den Unterschied zwischen Synchron und Asynchronen Webservices
    - Ich habe einen Beispielcode gefunden wie ich den Webservice aufrufe oder verstehe in etwa wo ich welchen Paramter definieren muss.
    - Ich verstehe nicht wann ich den Service als Webverweis oder als Service einbinden muss.
    - Ich verstehe nicht wie ich den Message Header und die Payload definieren muss.
    - Von XML habe ich noch keine Ahnung.

    - Und ich habe mir schon die Finger wund gesucht und kein Treffer hat die Erleuchtung gebracht.

    So dass sind die Rahmenbedingungen.

    Ich stelle mal mein VB hier Stück für Stück ein mit entsprechender Anmerkung wie ich es verstanden habe bzw. was ich damit Bezwecken will.

    VB.NET-Quellcode

    1. Imports <xmlns:v1="messageHeader">
    2. Imports <xmlns:v2="partnernummer">
    3. Imports <xmlns:v11="payload">


    Hiermit will ich für XML die Paramter definieren

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim mysend2_1 As --> New Definition vom Client
    3. Dim myresult As --> Definition von der Respons aus der Payload
    4. Dim Partnernummer As String = "XXXXXXXXX"


    In diesem Block definiere ich meinen Sender und meinen Empfänger. Der Sender ist bei mir der Client aus dem Webservice und der Empfänger die Payload Respons. Die Partnernummer ist ein Fixer Wert für den Test.

    VB.NET-Quellcode

    1. myresult = mysend2_1.hatPartnerAktiveVertraege(messageHeader:=XXXXX -- XML HEADER --- XXX, Payload=: XXXX - XML Payload - XXX


    Hier schicke ich die Abfrage ab in dem ich ja Sage meine Ergebnisse sind die Werte vom Sender.

    Jetzt habe ich das Problem, das wenn ich den Spaß kompilieren will die Meldung kommt, XElement kann nicht konvertiert werden.

    Was mache ich nicht richtig?
    Was habe ich noch nicht verstanden?

    Ich sage schon mal Danke für den Support.

    Ich hoffe auch das ich in diesem Forum qualifizierte Hilfe bekomme.

    Danke

    Grüße

    Sven
    Was hast du denn gesucht? Das sieht nach sehr viel Handarbeit aus.

    docs.microsoft.com/de-de/share…eb-service-client-project
    Ist zwar C# aber Schritt für Schritt beschrieben
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Hallo,

    vielen Dank für die Rückmeldung.

    Eigentlich geht es mir konkret darum wie ich den MessageHeader und die Payload in meinen VB übergebe.

    VB.NET-Quellcode

    1. Imports <xmlns:v1="messageHeader">
    2. Imports <xmlns:v2="partnernummer">
    3. Imports <xmlns:v11="payload">
    4. Public Class Form1
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Dim mysend2_1 As New PartnerXXXXXXXXX.PartnerXXXXXXXXXClient
    7. Dim myresult As PartnerXXXXXXXXX.payloadRespXXXXXX
    8. Dim Partnernummer As String = "XXXXXXXXX"
    9. myresult = mysend2_1.XXXXXAktiveVertraege(messageHeader:= ??? , payload:= ???)
    10. End Sub
    11. End Class


    Meine Header den ich SoapUi verwende sieht so aus:

    XML-Quellcode

    1. <v1:messageHeader><v1:senderFQN>URL-SENDERFQN</v1:senderFQN><v1:messageId> M -${=java.util.UUID.randomUUID()}</v1:messageId><v1:senderCurrentTimestampUTC>2017-08-17T14:32:15.057Z</v1:senderCurrentTimestampUTC><v1:processInstanceId> P -${=java.util.UUID.randomUUID()}</v1:processInstanceId></v1:messageHeader><v11:payload><v2:partnernummer>XXXXXXXX</v2:partnernummer></v11:payload>



    Wenn ich den Eintrage bekomme ich die Meldung:

    Der Wert vom Typ "XElement" kann nicht in "messageHeaderType"konvertiert werden.

    Das ist mein Problem und ich blicke nicht warum. Dafür bräuchte Hinweise, Tipps, Lösungen?

    Danke.
    Sodelle, heute hatte ich wieder Zeit gefunden um an meinem Programm zu schreiben. Dank Unterstützung habe ich jetzt wieder ein paar Sachen verstanden. Allerdings habe ich immer noch das Problem das ich die Meldung erhalte, String kann nicht in Payload-Format Konvertiert werden.

    Folgendes habe ich nun gemacht. Ich habe mit der WSDL die Datenquelle eingebunden. Dabei habe ich auch wieder gelernt das VS2017 dann mir eine Reference.vb erstellt. In dieser werden dann die Interface Funktionen Get Set usw zur Verfügung gestellt.

    Interessant ist dass die Funktion für die Payload "as String" erstellt wird und das Programm trotzdem die Fehlermeldung gibt, dass ich das Attriubt in Format String nicht in die Payload in Format String konvertieren kann.

    Das verstehe ich allerdings jetzt gar nicht mehr.

    Den MessageHeader usw. hab ich in Begriff gekommen. Hier nehme ich die Operation aus dem WebService und binde es so ein: OperationAusWebservice(messageHeader:= New MessageHeaderType, payload:= New Payload)

    in einer eigenen Classe habe ich dann die Function MessageHeader und Function Payload mit den Werten z.B. SenderFAQ, MessageID usw. befüllt.

    Was mache ich falsch?

    Danke!!


    Sodelle, der Compile klappt. Beim Ausführen erhalte ich noch die Meldung

    InvalidOperationException: Das oberste XML-Element 'payload' im Namespace 'XXXXXXXXXXXXXXXXXXXX' verweist auf die Distinct-Typen Test_WS3.ServiceReference1.payloadType und Test_WS3.ServiceReference1.payloadRespType.
    Verwenden Sie XML-Attribute, um einen anderen XML-Namen oder Namespace für das Element oder die Typen anzugeben.

    Da bin ich jetzt aber echt überfragt was ich machen muss. Dazu bin ich noch zu starker Newbe im Thema.

    Über Support bin ich Dankbar.
    Das Thema kann geschlossen werden. Das Problem habe ich gelöst bekommen. Und zwar wird beim Import der WSDL die Reference.vb mit der Form der Webservices die wir verwenden nicht richtig erstellt. Das Problem ist, dass innerhalb unserer WSDL von einer Payload zur weiteren Payload referenziert wird.

    Um das Thema zu heilen, muss ein eigenes Mapping geschrieben werden.

    Somit ist das Thema closed.

    Danke für den super Support