DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Bernhard Elbl Artikel Drucken
        
Datenaustausch per Soap

ist wohl keine komplexte Sache. Sie könnten ganze Recordset´s vom Soap-Server abholen. Recordset´s zuhandhaben ist einfach und bequem zu programmieren. Allerdings schieben Sie ein komplettes Objekt mit seinen Eigenschaften und Methoden übers Netz. Recordsets sind nicht gerade klein und Sie wollen ja auch nur die Daten transportieren. Besser wäre es nur Text zu senden. Und auch das ist einfach, wenn man weiss wie´s geht :-)

Wie funktioniert´s?
Das Recordset wird auf der Server-Seite mit Hilfe des ADODB.Stream-Objektes in XML konvertiert und auf der anderen Seite kann der XML-Stream ganau so simple wieder in ein Recordset konvertiert werden. Darauf resultiert ein disconnected Recordset, das sich einfach darstellen lässt.

Was brauchen Sie dafür (Softwarevoraussetzungen)?
- Getest mit ADO 2.6
- Visual Basic 6.0
- IIS
- Soap Toolkit 2.0

Sample:
Das Beispiel ist sehr einfach gestaltet und rein in VB schrieben. Die Cient-Application kann aber mit kleinen Änderungen in eine ASP-Seite umgeschrieben werden. 
I. Die Server-App. "DBAcc.CDBData" als ActiveX-DLL
- Neues Project: ActiveX-Dll
- Projectname: DBAcc, Klasse umbenennen in: CDBData
- In diese Klasse den Code einfügen
Option Explicit

Public Function GetData(ByVal sContactName As String) As Variant
    Dim conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim st As New Stream
    conn.Open "Provider=SQLOLEDB.1;Initial Catalog=Northwind;Data Source=MyServer"
    rs.Open "SELECT * FROM Customers where Contactname like '" & sContactName & "'", conn

    ' Recordset in Stream-Object ablegen
    rs.Save st, adPersistXML
    ' Stream-Text als Rückgabe-Wert
    GetData = st.ReadText

    Set st = Nothing
    Set rs = Nothing
    Set conn = Nothing
End Function
- Project-Eigeschaften: unbeaufsichtige Ausführung aktivieren!!! (sehr wichtig--> wenn in der
Server-App ein Fehler auftritt wird dieser unterdrückt, und nicht am Server als MsgBox angezeigt!
- kompilieren/registrieren


II. WSDL-File generieren mit Hilfe des WSDL-Generators(SOAP Toolkit)

III. Client-App als Standard-EXE
Option Explicit

Public Enum eDataType
    enRS
    enXML
End Enum

Public Function GetData(sCustomerName As String, DataType As eDataType) As Variant
    Dim oSOAP As MSSOAPLib.SoapClient
   
    Set oSOAP = New SoapClient ' Soap-Client instantiieren
   
    oSOAP.ClientProperty("ServerHTTPRequest") = True

' initialisieren Soap-App mit Hilfe des "wsdl"-Files
    oSOAP.mssoapinit "http://localhost/developer2/soap/DBCust.wsdl"
   
    Select Case DataType
        Case enXML
            GetData = oSOAP.GetData(sCustomerName)
        Case enRS
            Set GetData = StringStreamToRS(oSOAP.GetData(sCustomerName))
    End Select
   
    Set oSOAP = Nothing
End Function
   
' den erzeugten XML-String zurück konvertieren in ein Recordset
Private Function StringStreamToRS(ByRef sStream As String) As Recordset
    Dim rs As New Recordset
    Dim st As New Stream
    st.Open
    st.WriteText sStream
    st.Position = 0

    rs.Open st
  
    Set StringStreamToRS = rs
   
    Set st = Nothing
End Function

Das Darstellen funktioniert mit 2 Zeilen Code, unter Verwendung des ADODC-Steuerelements und dem Datagrid Control von Microsoft...
Private Sub Form_Load()
    Dim oDB As New CDataFetcher
   
    Set Adodc1.Recordset = oDB.GetData("%a%", enRS)
End Sub


Die Sample Source´s gibts auch wieder als Download.


 


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente

  Erfasst am: 05.02.2002
  Gültig bis: 07.03.2002
0 Ratings
Bewertung: 0,0%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG