Soap und VB

Hallo zusammen,

da ich nicht so bewandert bin in PHP, suche ich ein VB Projekt das die SOAP Schnittstelle anspricht (VB6 o. .NET), mit der ich dann z.Bsp. eine FS20 Steckdose über VB schalten kann.

Ich habe hier einige Codeschnipsel und Funktionen in dieser Richtung gefunden, mir fehlt allerdings der zusammenhang zum rest der in einem VB Projekt nötig ist.

Vieleicht hat jemand eine art VB Testprojekt mit Form und was dazu gehört, damit ich damit mal rumspielen kann und die zusammenhänge besser verstehe.

Würde mich riesig freuen wenn jemand bereits sowas hat und mir zum Testen und verstehen überlassen könnte!:smiley:

Gruß Michael

In dem Code, den ich mal gepostet hab, müsste eigentlich alles drin sein. Hast Du das schon mal angeschaut?

Hallo dfhome,

klar habe ich, ist auch schon angesehen.

Nur, sorry, ich meinte das ich nicht weiss was jetzt weiter zu tun ist um mit ips Server zu verbinden und befehle zu senden. Habe .NET erst seit kurzem.
Habe vorher mit VB6 gearbeitet aber SOAP … keine Ahnung.

Ich dachte mir das jemand ein Programm wie in der „IPS 2 SDK in der Doku“, bereits in VB oder .NET gemacht hat.

Gruß Michael

PS:Vielleicht hast du Lust/Zeit mal sowas zu machen, wäre sicher eine Hilfe auch für andere.:slight_smile:

Hallo zusammen,

hat denn keiner ein fertiges Projekt, (vorzugsweise VB6) mit dem man die
SOAP Schnittstelle ansprechen kann (IPS).

Brauche das, um zu verstehen wie das alles funktioniert und ein wenig rum zu testen.

Oder, ist jemand in der lage das SOAP DEMO in Delphi was in der Doku unter SDK/Tools „IP-Symcon SDK für Version 2.10“ ist, in VB6 oder .NET zu konvertieren?

Soll auch dann nicht umsonst gemacht werden.

Gruß Michael

In meinem Code ist doch eine eigene SOAP-Klasse drin (IIPS_SOAP). Da ist die ganze Kommunikation drin (Verbinden etc). Ich verstehe nicht, was Du noch mehr brauchst? Das ist genau die Konvertierung, die Du ansprichst.

VB6 unterstützt kein SOAP soweit ich weiß. Für C#.Net gibt es eine Demo. Für VB.NET gibt es hier im Forum soweit ich weiß etwas.

paresy

da SOAP nur XML über HTTP ist, kann man sich bei den entsprechenden MS-Bibliotheken bedienen.
Ein einfaches Beispiel ist hier.

Tommi

Hallo,

also wenn ich das richtig verstehe wird mittels HTTP gesendet was ich wissen will (SOAP), zurück kommt dann das ergebnis per XML, richtig?

Wie sieht denn so eine Anforderung (HTTP POST) aus?

http://server:3773/wsdl/IIPSShutterControl

um Informationen über das Shutter zu bekommen ? :confused:

was bekomme ich dann zurück ? :confused:

@tommi - Danke den hatte ich auch gefunden.
@dfhome - Wäre nicht schlecht wenn deine Klasse bereits eine abfrage und eine Datenanzeige beinhalten würde, damit ich nachvollziehen kann was in welcher weise wohin geschickt wird und angezeigt werden kann.

Ein .net versierter wird sicherlich sofort erkennen was mit deiner klasse zu tun ist, ich leider sehe das nicht und brauche eine Form ein eingabefeld.

Auf deutsch, Programmcode starten, eingabe (zb Script 1234) starten und ergebnis im fenster2 sehen.

Da kann ich was mit anfangen.

Trotzdem Danke.

Gruß Michael

PS: Wäre sicherlich eine gute Idee, das vorhandene Delphi Demo Programm irgendwann mal auch für .NET zu machen.

Wenn Du eine vernünftige IDE benutzt, brauchst Du eigentlich nur angeben, wo die WSDL liegt, und sie baut Dir automatisch Proxyklassen, die Dir die Funktionen zur Verfügung stellt. In der WSDL steht schließlich drin, was rein muss und was raus kommt. VB.Net hat da auch einen Importer für. Wie Du den bedienst weiß Google, ich habe das zuletzt vor 4 Jahren benutzt. In Eclipse für J2EE ist das ein Kinderspiel.

Hallo zusammen,

ich habe mal versucht das beispiel was tommi angegeben hat für IPS umzubauen.

Habe mir dazu alles rausgesucht was es hier zum thema gibt, finde leider nichts „vieleicht bin ich ja blind“ wo und wie ich den TIDHeader angeben muss.

Ich weiss es steht in der wsdl, nur reichen meine kenntnisse darüber offensichtlich bei weitem leider nicht aus.

Vieleicht kann mir ja jemand auf die sprünge helfen.

Hier ein teil des Test Programm .

On Error GoTo err_handler

' instanz 33799 Teststeckdose die geschaltet werden soll
  
  s = s & "<SOAP-ENV:Envelope" & vbCrLf
  
  s = s & "xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/""" & vbCrLf
  s = s & "xmlns:SOAP-ENC=""http://schemas.xmlsoap.org/soap/encoding/""" & vbCrLf
  s = s & "xmlns:jsx1=""ipsconnect:IIPSFS20:IIPSFS20""" & vbCrLf

  s = s & "xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">" & vbCrLf
  s = s & "xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">" & vbCrLf

' Body
  s = s & "<SOAP-ENV:Body>" & vbCrLf
  s = s & "<jsx1:SwitchMode>" & vbCrLf
  s = s & "xmlns:jsx1=""urn:UIPSModuleTypes-IIPSFS20"">"
  s = s & "<DeviceOn xsi:type=""xsd:boolean"">true</DeviceOn>" & vbCrLf
  s = s & "</jsx1:SwitchMode>" & vbCrLf
  s = s & "</SOAP-ENV:Body>" & vbCrLf
' Body
  
  s = s & "</SOAP-ENV:Envelope>" & vbCrLf

  o.open "POST", "http://192.168.0.111:3773/soap/IIPSFS20", False
  o.setRequestHeader "Content-Type", "text/xml"
  o.setRequestHeader "Connection", "close"
  o.setRequestHeader "SOAPAction", ""
  o.send s
  
  txtResponseHeaders = o.getAllResponseHeaders
  txtResponse = o.responseText

err_handler:
  If Err.Number <> 0 Then MsgBox "Error " & Err.Number & ": " & Err.Description

Ich denke das es mit TIDHeader eigentlich funktionieren sollte ?

Für Hilfe wäre ich sehr dankbar.

Gruß Michael

Also es gibt eine SOAP-Library von MS, die auch unter VB6 geht. Beispiel kann ich bei bedarf zur Verfügung stellen

lg, christian

Hallo,

also das VB-Programm funktioniert, bekomme nur folgende Fehlermeldung zurück.

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body>
<SOAP-ENV:Fault><faultactor/><faultcode>SOAP-ENV:Server</faultcode>
<faultstring>No class registered for invokable interface IIPSFS20</faultstring>
</SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>

Ich habe hier im Forum gelesen das es an dem fehlendem TIDHeader liegt, ich weiss aber nicht wo im Header und in welchem format ich ihn dort eintragen muss.

Wenn du auf das SOAP Toolkit V3 anspielst, das habe ich hier installiert.

Gruß Michael

keiner eine Idee ?

Sieht schlecht aus, wenn dann muss paresy hier antworten.

in einem anderen Thread habe ich gefunden:

dort ist ein Beispiel für Delphi und C#

im Prinzip sieht es aus als ob du im Header einfach einen Eintrag mit
ID vom Typ Integer mit der InstanzID setzen musst

lg, christian

Jepp, in VB sieht´s so aus:


Dim tmp_tid As New IIPSFS20.TIDHeader
tmp_tid.ID = InstanceID

Dann einfach weitermachen.

Hallo zusammen,

wie bereits erwähnt bin ich mit einem Programm am rumtesten das hier VB projects - SOAP test zu finden ist.

Mein problem nun ist, das ich diesen Header (in VB6 muss man ihn selber zusammenbauen) für ips anpassen muss.

Ich denke das das bis jetzt alles richtig ist (hoffe ich).

Nun muss ich in diesem VB-Code (Header) eben noch den TIDHeader an der entsprechenden stelle an IPS übermitteln (oder habe ich einen denkfehler).

Hier nochmal der Header in dem VB6 Programm.

' instanz 33799 Teststeckdose die geschaltet werden soll
  
  s = s & "<SOAP-ENV:Envelope" & vbCrLf
  
  s = s & "xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/""" & vbCrLf
  s = s & "xmlns:SOAP-ENC=""http://schemas.xmlsoap.org/soap/encoding/""" & vbCrLf
  s = s & "xmlns:jsx1=""ipsconnect:IIPSFS20:IIPSFS20""" & vbCrLf

  s = s & "xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">" & vbCrLf
  s = s & "xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">" & vbCrLf

' Body
  s = s & "<SOAP-ENV:Body>" & vbCrLf
  s = s & "<jsx1:SwitchMode>" & vbCrLf
  s = s & "xmlns:jsx1=""urn:UIPSModuleTypes-IIPSFS20"">"
  s = s & "<DeviceOn xsi:type=""xsd:boolean"">true</DeviceOn>" & vbCrLf
  s = s & "</jsx1:SwitchMode>" & vbCrLf
  s = s & "</SOAP-ENV:Body>" & vbCrLf
' Body
  
  s = s & "</SOAP-ENV:Envelope>" & vbCrLf

  o.open "POST", "http://192.168.0.111:3773/soap/IIPSFS20", False
  o.setRequestHeader "Content-Type", "text/xml"
  o.setRequestHeader "Connection", "close"
  o.setRequestHeader "SOAPAction", ""
  o.send s
  
  txtResponseHeaders = o.getAllResponseHeaders
  txtResponse = o.responseText


Ich wollte das bloss zum reinen testen mal so machen um das besser verstehen zu können wie es funktioniert.

Sicher kann ein versierter Programmierer das in der wsdl sehen, ich bin aber leider keiner, deshalb würde ich euch bitten, mir mal zu zeigen wie dann ein solcher Header für IPS aufgebaut ist oder mir mal den code oben mit dem TIDHeader zu vervollständigen.

Geschaltet werden soll eine FS20 Steckdose mit der ID 33799.

Würde mich riesig freuen wenn mir da einer mal helfen könnte!!!:slight_smile:

Gruß Michael

Also wenn ich mir diesen Code ansehe, dann sieht das aber nicht nach SOAP direkt aus, sondern eher nach manuellem SOAP.

ich vermute auch, dass s nicht von einem SOAP-Objekt stammt, sondern eher ein HTTP-Objekt ist.

Hab mir extra mein SOAP-Beispiel rausgesucht, und das sieht so aus:


    Dim SOAPClient As Object

    Set SOAPClient = CreateObject("MSSOAP.SOAPClient")
    
    'On Error Resume Next

    SOAPClient.mssoapinit ("http://www.webservicex.net/country.asmx?WSDL")
    If Err <> 0 Then Debug.Print "SOAP-Init Failure: " + Err.Description
    
    Debug.Print SOAPClient.GetCountryByCountryCode("de")
    If Err <> 0 Then
      Debug.Print "Error: " + Err.Description
      Debug.Print "Error Code: " + SOAPClient.faultcode
      Debug.Print "Error String: " + SOAPClient.faultstring
      Debug.Print "Fault Actor: " + SOAPClient.faultactor
      Debug.Print "Detailed Information: " + SOAPClient.detail
    End If

ich hatte bei meinen Tests auch so einen HTTP-Versuch, der hat auch irgendwie nicht geklappt und sah ähnlich wie bei dir aus



Dim soapText As String
Dim xmldom As Object, xmlhttp As Object
Const SoapServer = "http://www.sozialversicherung.at/agh-ws-1.1-tt/DienstgeberAbfrageWS"
soapText = "<?xml version=""1.0"" encoding=""utf-8""?>" & vbCrLf & _
       "<SOAP-ENV:Envelope xmlns:SOAP-
...
       "</SOAP-ENV:Envelope>"

Set xmldom = CreateObject("Microsoft.XMLDOM")
Set xmlhttp = CreateObject("Msxml2.XMLHTTP.3.0")

xmlhttp.Open "POST", SoapServer, False
xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
xmlhttp.setRequestHeader "MessageType", "CALL"
xmlhttp.send (soapText)

If xmlhttp.Status = 200 Then
Set xmldom = xmlhttp.responseXML
Debug.Print (xmldom.xml)
Else
Debug.Print ("Didn't Work<BR>")
Debug.Print ("status=" & xmlhttp.Status)
Debug.Print ("<BR>" & xmlhttp.statusText)
End If

Set xmlhttp = Nothing
Set xmldom = Nothing

vielleicht hab ich die nächsten Tage mal Zeit und probier das aus.

lg, christian

Hallo,

ja, manuell zusammengebaut, richtig.

von tommy

da SOAP nur XML über HTTP ist, kann man sich bei den entsprechenden MS-Bibliotheken bedienen.

Tommi

Funktioniert ja auch soweit ich das erkennen kann, bis auf die Fehlermeldung (am anfang des Themas zu sehen) die auf einen fehlenden TIDHeader (laut paresy, in einem anderem Thema) hindeutet.

Sieh dir das mal an „VB projects - SOAP test“ .

Was mir fehlt in dem manuell zusammengebauten HTTP POST ist der TIDHeader.

Weiss denn sonst keiner darüber bescheid ??

Oder hat jemand eine art lauffähiges TestProgramm in VB incl Source um IPS abfragen zu machen??

@dfhome
und wenn ich mich besser mit .Net auseinandergesetzt habe, werde ich auch mit deiner klasse zurechtkommen aber im moment brauche ich ein komplettes lauffähiges Programm zum rumtesten!

Gruss Michael

ich weiss nur nicht, warum du das unbedingt manuell machen möchtest und nicht einfach das soap-toolkit nimmst.

wie gesagt, wenn ich die nächsten Tage mal Zeit habe, dann mache ich dir ein lauffähiges Beispiel.

lg, christian

Hallo Christian,

vielen vielen dank für deine hilfe.

Ich wünsche dir einen guten rutsch.

Gruß Michael