Avatar billede veronica Nybegynder
14. september 2004 - 11:40 Der er 9 kommentarer og
1 løsning

webservices til data integration

Hej guruer :)

Jeg skal i gang med at lave et web-baseret analyseværktøj, som samler data fra forskellige systemer i organisationen. På denne måde skal man kunne sammenkoble og aggregere elementer fra de forskellige systemer, og derved få informationen fra andre vinkler ind i de operative systemer.

Jeg forstiller mig, at dette kan gøres med XML Web services ? Men jeg sidder lidt fast, idet jeg ikke helt kan gennemskue, hvordan det skal kunne lade sig gøre. Al den dokumentation, jeg kan finde om web services, handler om at bruge 1 web service ad gangen - ikke om at kombinere dem.

Jeg har forsøgt at lade mine web services returnere datasets, som jeg så ville kombinere i min applikation. Men det giver store problemer at lave relationerne bla. grundet forkerte datatyper, null værdier, etc...

Er det helt forkert forstået, at man skulle kunne bruge web services til dette ?

mvh. Veronica
Avatar billede arne_v Ekspert
14. september 2004 - 11:55 #1
Web Services er en god løsning, hvis systemerne ikke bruger samme teknologi.

Altså du har f.eks. noget .NET/SQLServer, noget J2EE/Oracle og noget
C/flade filer.

Jeg kan ikke se noget problem i at din ASP.NET web app kalder flere
web services og kombinerer data fra dem.

XML er normalt kun transport format i web services og usynligt for
client koden.

Normalt lader man web services returnere generelle datatyper som kan
implementeres i alle sprog. Eksempel: array af objekter med felter
A,B,C hvor A og B er integer og C er string.
Avatar billede veronica Nybegynder
14. september 2004 - 11:57 #2
OK - jeg fik vidst ikke skrevet at der var tale om forskellige platforme.. men det er der :-)

Nogen der kan give mig et eksempel (eller et link til et) på, hvordan man i praksis kan lave denne data-binding mellem xml web services'ne ?
Avatar billede arne_v Ekspert
18. september 2004 - 15:02 #3
Du henter data fra X web services, du viser de returnerede data. Der er ikke noget
magisk i det.

Så jeg forstår ikke helt hvad du leder efter.
Avatar billede veronica Nybegynder
20. september 2004 - 13:09 #4
Det jeg har behov for er at kombinere data..
Oversat til et teoretisk eksempel kunne man sige, at jeg fra en web service får data om produkter i form af farve - mens jeg fra en anden web service for data om salgstal. Så har jeg fx brug for at kunne vise salgstallene for de gule produkter..  eller fx at vise hvilken farve der sælger bedst.
Giver det mere mening nu ?
mvh. Veronica
Avatar billede arne_v Ekspert
22. september 2004 - 22:46 #5
Ikke specielt.

Men her er et super simpelt eksempel.

Vi laver 2 web services (for nemhedens skyld i ASP.NET):

using System;
using System.Web.Services;

namespace test
{
    public class WS1 : WebService
    {
        [WebMethod]
        public string[] GetColours()
        {
            return new string[] { "Red", "Green", "Blue" };
        }
    }
}

og

using System;
using System.Web.Services;

namespace test
{
    public class WS2 : WebService
    {
        [WebMethod]
        public int[] GetSales()
        {
            return new int[] { 100, 200, 300 };
        }
    }
}

så genererer vi stubbe for web servicene og laver en side som
henter data og viser dem:

<%@ import namespace="System.Collections" %>
<html>
<head>
<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        Hashtable ht = new Hashtable();
        WS1 ws1 = new WS1();
        string[] cols = ws1.GetColours();
        WS2 ws2 = new WS2();
        int[] sale = ws2.GetSales();
        for(int i = 0; i < cols.Length; i++)
        {
            ht.Add(cols[i], sale[i]);
        }
        MyDataList.DataSource = ht;
        MyDataList.DataBind();
    }
}
</script>
</head>
<body>
<form runat=server>
    <asp:DataList id="MyDataList" runat="server" BorderColor="black" BorderWidth="2" GridLines="Both">
        <ItemTemplate>
            <%# ((DictionaryEntry)Container.DataItem).Key %> :
            <%# ((DictionaryEntry)Container.DataItem).Value %>
        </ItemTemplate>
    </asp:DataList>
</form>
</body>
</html>

Der er intet i det.
Avatar billede veronica Nybegynder
23. september 2004 - 00:47 #6
Hej igen og tak for dit svar.

Men hvis jeg læser det, du har skrevet korrekt, så kombinerer du sådan set bare data fra de to webservices hip som hap .. ie. der er ikke nogen sammenhæng mellem "Red" og 100, som gør at de skal kombineres.

Det jeg mente var, at WS1 i stedet for at returnere et string-array, skulle returnere et DataSet med fx..
Product1  Red
Product2  Green
Product3  Blue

.. og at WS2 returnerede et DataSet med
Product1  100
Product2  200
Product3  300

Mao. er der nu en relation mellem "Red" og 100 gennem Product1.

Nu er det så, jeg har behov for at lave følgende output:
"Red"  100
"Green" 200
"Blue"  300

Samt at finde Maximal-værdien, ie. det bedst sælgende produkt er "Blue" 300.

Snakker jeg stadig i tåger ?
/Veronica
Avatar billede arne_v Ekspert
23. september 2004 - 07:55 #7
Nej.

Og det er næsten også det mit eksempel gør.

Jeg har bare joinet data på index i de returnerede data.

Du vil gerne have joinet data på noget som eksplicit returneres.

Groft sagt skal:

- WS1 returnere et array af objekter med 2 felter ID int og Colour string
- WS2 returnere et array af objekter med 2 felter  ID int og Sale int
- WStest skal kalde de 2 web services og vise data joinet

Selve visningen kan laves meget lignende ovenstående.

Så kernen i problemet er at tage de 2 arrays af objekter man får fra de 2 web service
kald og konstruere et nyt array af objekter med 2 felter Colour string og Sale int.

Det kan jeg godt lave et eksempel på i aften.
Avatar billede arne_v Ekspert
23. september 2004 - 07:57 #8
Du kan ikke lade din web service returnere en System.Data.DataSet, fordi
det er .NET specifikt og derfor ikke understøttes af alle web services.

Og jeg har dig lidt mistænkt for at overvurdere hvad web services kan.
Der er ikke noget magi i det. Man kalder en metode og får noget data igen, som
man bruger på en eller anden måde.
Avatar billede veronica Nybegynder
23. september 2004 - 09:49 #9
Hej igen, Arne
OK så tror jeg jeg fik svar på mit spørgsmål. Man er altså med webservices nødt til at lave sin logik selv - ie. man skal selv iterere sine data igennem for at finde relationen.. Du behøver ikke at udbygge eksemplet, jeg forstår det godt som du skriver det.
Jeg havde - som du også antyder - håbet på, at der fandtes en eller anden måde at gøre dette automatisk (og sikkert med bedre performance end jeg selv kan gøre det). Men nej - så jeg må jo bare til det..
Tak for hjælpen.
mvh. Veronica
Avatar billede arne_v Ekspert
23. september 2004 - 15:14 #10
Ægte platforms uafhængige web services (som defineret i WS-I) er ret low
level: simple kald med argumenter som er arrays og structs af de kendte
data typer: integer, string, floating point etc..

Du kan så lave dit eget genbrugelige bibliotek til integration på
et højere niveau.

Eller du kan kigge på et færdigt produkt som kan lidt mere. I sidste
tilfælde skal du nok kigge på produkter som IBM MQSI, Iway, Sterling
og MS Biztalk.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester