[NEWSboard IBMi Forum]
Seite 1 von 3 1 2 ... Letzte
  1. #1
    Registriert seit
    Aug 2011
    Beiträge
    12

    Webservice Performance

    Hallo,
    Ich habe auf der AS/400 einen WebService, basierend auf einem WWS-System für einen Onlineshop zur Verfügung gestellt, welcher Daten zu den Bestellpositionen liefert.

    Technisch funktioniert alles.
    Aufruf sieht ungefähr so aus:

    DPos DS qualified
    D PosNo 5s 0
    D PosTxt 30a
    D PosAmt 11s 2
    *
    D inOutData DS qualified
    D InvoiceNo 11a
    D InfoiceTxT 30a
    D Position likeds(Pos) dim(50)
    D FootTxT 30a
    *
    D outErrData DS qualified
    D ok_Flag 1A
    D ok_Msg 80A

    C *entry plist
    C parm inOutData
    C parm outErrData


    Da ich bis jetzt noch keine Möglichkeit gefunden habe den Eingabeparameter variabel zu gestalten, habe ich die Positionen auf 50 (über-)Dimensioniert.

    Und das ist mein Problem, bei dim(1), braucht der Webservice ca. eine halbe Sekunde, bei dim(10) 4 Sekunden und bei dim(50) 15-18 Sekunden.

    Nach einigen Versuchen scheint der Flaschenhals das füllen aller nicht übergebenen Werte mit Standartwerten durch den Webservice zu sein.

    Kennt irgendwer eine Möglichkeit hier variabel zu arbeiten, gegebenenfalls auch mit NULL-Werten, ohne die Webserviceschnittstelle nach außen zu Ändern, da der Shop schon steht.
    Oder eine andere Möglichkeit.

    Danke im Voraus

    Thomas

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Was ich nicht erkennen kann, du musst dem Web-Service doch irgendwo die Größe deiner Variablen bzw. die Anzahl der Positionen mitteilen.
    Dies müsste doch dann variabel genug sein.

    Alternativ kann man die Struktur ja auch per %subst() in einer Hilfsvariablen zusammenbauen (%size hilft da für Längenberechnung der einzelnen Elemente) und diese dann übergeben.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Aug 2011
    Beiträge
    12
    Erst mal Danke für die Schnelle Antwort.

    Es handelt sich um ein Ile-RPG PGM

    die H Karte :

    H PGMINFO(*PCML:*MODULE)
    H DEBUG DECEDIT('0,') DATEDIT(*YMD.)

    wenn ich nun dieses RPG als Webservice über den HTTPAdmin freigebe, werden ja alle entry parms zur Verfügung gestellt, mit den jeweiligen Feldnamen und Arten:

    xsd param0
    !--Optional:--
    xsd:_INOUTDATA
    !--Optional:--
    xsd:_FOOTTXT /xsd:_FOOTTXT
    !--Optional:--
    xsd:_INFOICETXT /xsd:_INFOICETXT
    !--Optional:--
    xsd:_INVOICENO /xsd:_INVOICENO
    !--Zero or more repetitions:--
    xsd:_POSITION
    !--Optional:--
    xsd:_POSAMT /xsd:_POSAMT
    !--Optional:--
    xsd:_POSNO /xsd:_POSNO
    !--Optional:--
    xsd:_POSTXT /xsd:_POSTXT
    /xsd:_POSITION
    /xsd:_INOUTDATA
    /xsd param0



    Die Position wird nur einmal dargestellt, kann aber mehrmals übergeben werden, der Webservicedienst der AS/400 füllt nun automatisch die Positionen.

    durch Dim(50) kann ich dann bis zu 50 Positionen ansprechen -> mit inOutData.Position(1).PosNo ......

    werden nur 2 Positionen übergeben wird ..Position(3-48) mit Standardwerten gefüllt (automatisch) werden 52 Positionen übergeben, werden Position 51+52 einfach nicht an das RPG PGM übertragen.

    Vielleicht ist ja hier mein Ansatz falsch?

  4. #4
    Registriert seit
    Aug 2011
    Beiträge
    12
    Ergänzung zu Oben,

    Durch die Einbindung des Webservice mit HTTPAdmin, werden ja die Anzahl Parameter und Variablen über das *PCML automatisch zugeordnet. Ich habe auch schon versucht eine externe PCML Beschreibung zu verwenden und die Position als ein Feld zu defenieren was ich dann mit %substr oder XML-Into verarbeite aber da kriege ich einen Fehler im HTTPAdmin wenn die PGM Parameter nicht zur PCML Beschreibung passen.

  5. #5
    Registriert seit
    Jul 2005
    Beiträge
    1.053
    Zitat Zitat von ThomasSprenger Beitrag anzeigen
    Ergänzung zu Oben,

    Durch die Einbindung des Webservice mit HTTPAdmin, werden ja die Anzahl Parameter und Variablen über das *PCML automatisch zugeordnet. Ich habe auch schon versucht eine externe PCML Beschreibung zu verwenden und die Position als ein Feld zu defenieren was ich dann mit %substr oder XML-Into verarbeite aber da kriege ich einen Fehler im HTTPAdmin wenn die PGM Parameter nicht zur PCML Beschreibung passen.
    Lässt sich das nicht über ein keyfeld zusammen bringen

    ich meine man kann doch alle in Betracht kommenden Bezeichnungen in ein key zusammen fassen wie man es ja auch in RPG macht.

    Und nur den key als Parameter an *PCML übergeben.

    Gruß AS400.lehrling

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Da die Strukturdefinition ja statisch ist wirst du wohl keine Chance haben da was zu ändern.

    Hier musst du mal die statistische Wahrscheinlichkeit zu Rate ziehen, wie viele Positionen du am meisten benötigst.
    Wenn du am häufigsten eben nur 1 Position benötigst und nur seltener mehr als 1, dann definierst du eben nur 1 und rufst dann eben mehrfach auf, wobei ich nicht weiß ob man dem Service die gewünschte Position mitgibt oder einfach alle verfügbaren übergibt.

    Da Web-Services meistens XML-Dokumente austauschen ist wohl hier das Problem der Dokumentgröße gegeben.
    Allerdings erklärt sich der Zeitfaktor von 20 Sekunden eigentlich nicht.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... ich weiß ja nicht mit welchem Spielzeug du da arbeitest, aber eine WSDL kann schon variable Schnittstellen definieren...

    D*B

    Zitat Zitat von ThomasSprenger Beitrag anzeigen
    Ergänzung zu Oben,

    Durch die Einbindung des Webservice mit HTTPAdmin, werden ja die Anzahl Parameter und Variablen über das *PCML automatisch zugeordnet. Ich habe auch schon versucht eine externe PCML Beschreibung zu verwenden und die Position als ein Feld zu defenieren was ich dann mit %substr oder XML-Into verarbeite aber da kriege ich einen Fehler im HTTPAdmin wenn die PGM Parameter nicht zur PCML Beschreibung passen.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Aug 2011
    Beiträge
    12
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Da die Strukturdefinition ja statisch ist wirst du wohl keine Chance haben da was zu ändern.

    Hier musst du mal die statistische Wahrscheinlichkeit zu Rate ziehen, wie viele Positionen du am meisten benötigst.
    Wenn du am häufigsten eben nur 1 Position benötigst und nur seltener mehr als 1, dann definierst du eben nur 1 und rufst dann eben mehrfach auf, wobei ich nicht weiß ob man dem Service die gewünschte Position mitgibt oder einfach alle verfügbaren übergibt.

    Da Web-Services meistens XML-Dokumente austauschen ist wohl hier das Problem der Dokumentgröße gegeben.
    Allerdings erklärt sich der Zeitfaktor von 20 Sekunden eigentlich nicht.

    Das habe ich mit meinen Versuchen probiert und bin momentan bei 10 Positionen mit 3,5-4 Sekunden und Decke ca 88% aller Anfragen ab.

    Wäre nur schön gewesen wenn man mit RPG aus der statischen Definition rausgekommen wäre auf eine Varriable.

    Trozdem vielen Dank für die Hilfe

  9. #9
    Registriert seit
    Aug 2011
    Beiträge
    12
    Zitat Zitat von BenderD Beitrag anzeigen
    ... ich weiß ja nicht mit welchem Spielzeug du da arbeitest, aber eine WSDL kann schon variable Schnittstellen definieren...

    D*B
    mein Spielzeug ist eine 520 mit V6R1.
    WSDL ist varriabel, nur ist in dem WWS System ist alles in RPG-Programmiert und das Wissen hier ist auch in RPG, deshalb wäre es schön, wenn es eine varriable methode geben würde den Webservice zu verarbeiten und nur soviele Positionen zu füllen wie benötigt werden.

    Die Struktur der Schnittstelle nach aussen ist leider duch den WebServiceClient (Onlineshop) vorgegeben.

  10. #10
    Registriert seit
    Aug 2011
    Beiträge
    12
    Zitat Zitat von AS400.lehrling Beitrag anzeigen
    Lässt sich das nicht über ein keyfeld zusammen bringen

    ich meine man kann doch alle in Betracht kommenden Bezeichnungen in ein key zusammen fassen wie man es ja auch in RPG macht.

    Und nur den key als Parameter an *PCML übergeben.

    Gruß AS400.lehrling

    Die Struktur der Schnittstelle nach aussen ist leider duch den WebServiceClient (Onlineshop) vorgegeben.

    Wenn es nach intern (zur AS/400) eine Möglichkeit gibt, wäre ich für jede Anregung Dankbar.

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Spielzeug meinte nicht Hardware, sondern die Bausteine der Implementierung, von der WSDL bis hin zum RPG Programm; da hakt es doch offenkundig.


    Zitat Zitat von ThomasSprenger Beitrag anzeigen
    mein Spielzeug ist eine 520 mit V6R1.
    WSDL ist varriabel, nur ist in dem WWS System ist alles in RPG-Programmiert und das Wissen hier ist auch in RPG, deshalb wäre es schön, wenn es eine varriable methode geben würde den Webservice zu verarbeiten und nur soviele Positionen zu füllen wie benötigt werden.

    Die Struktur der Schnittstelle nach aussen ist leider duch den WebServiceClient (Onlineshop) vorgegeben.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  12. #12
    Registriert seit
    Aug 2011
    Beiträge
    12
    Stimmt. Momentanes Vorgehen, mit meinem jetzigen Wissen:

    1) Rpg-PGM mit Parametern erstellen
    2) über HTTPAdmin, Anwendungsserver, Implementierte Services -> als Webservice bereitstellen

    geht soweit gut, schnell und einfach. Sofern sich die übergebenen Werte in Grenzen halten sind die Antwortzeiten auch akzeptabel.

    Nur wenn ich jetzt viele Werte habe oder eben nicht weiß wie viele und muss dementsprechend ein Maximum an Werten vorhalten wird es langsam.

    Hier hakt es - da habe ich keine Idee wie ich das variabel oder performant gestalten kann.

Similar Threads

  1. SQL Performance
    By mariupol1963 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 11-08-06, 13:06
  2. Performance CRTJVA
    By Muchi in forum NEWSboard Java
    Antworten: 0
    Letzter Beitrag: 07-08-06, 14:25
  3. Performance WRKSPLF *ALL
    By Wolferl in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 06-06-06, 09:18
  4. Performance i5
    By heini in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 11-01-06, 14:07
  5. Gigabit Ethernetkarte 5701 schlechte Performance
    By TARASIK in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 26-10-04, 10:27

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •