Communicatie via internet

Pagina: 1
Acties:

  • LangeJanneman
  • Registratie: Juni 2007
  • Laatst online: 22-07-2021
Hallo,

Ik ben bezig met een programma dat bepaalde gegevens uit een database moet halen (via internet). In principe kan ik 'alle' communicatiewegen gebruiken. Dus een directe verbinding met de Database (dmv port forwarding in de router) of dmv een webserver die een XML bestand aanmaakt.

Nu is mijn vraag.. Wat zouden jullie doen?

Een aantal voor en nadelen die ik zelf bedacht had:

Bij een directe verbinding met een database kan lastig worden door een firewall bij de klant.

Een XML bestand ophalen vanaf een webserver heb je dat probleem niet alleen moet je dan wel eerst dat XML bestand aanmaken, ophalen en daarna weer omzetten naar variabelen.

Het grootste probleem is dat ik geen (weinig) ervaring heb met communicatie vie .NET.

Nu ben ik benieuwd wat jullie zouden doen...

Let op!: Ik verzoek hier niet om code's o.i.d. maar om ideeën voor de communicatie.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
volgens mij is een WebService in dit geval toch de meest gangbare oplossing.... je communiceert via een algemeen bekend format (XML) onafhankelijk van welke soft- en hardware er aan beide kanten van de lijn staat...

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:28
Ik zou het doen met webservices; geen problemen met firewalls, niet teveel geneuzel met 'infrastructuur', en het laat je toe om een 'interface' te gebruiken om met die DB te communiceren.
De webservice stelt de methods beschikbaar die je nodig hebt, bv 'GetCustomers()', maw, je hebt een soort van abstractie.

https://fgheysels.github.io/


  • LangeJanneman
  • Registratie: Juni 2007
  • Laatst online: 22-07-2021
WebService is geheel nieuw voor mij. Ben nl net pas voor het eerst begonnen met ASP e.d. .NET gebruikte ik al langer maar niet (zoals eerder vermeld) met communicatiemogelijkheden.

Dus de verwachte vraag: Hoe roep ik die webservice op (aanmaken gaat wel lukken via Visual Web Developer). Ik heb ondertussen wel diverse pagina's doorgelezen maar dat gaat alleen over de webservice maken, nie over hoe te gebruiken.

ps. Probleem is dat het engels me niet helemaal glad afgaat en ik alleen zoek op nederlandstalige tutorials, voorbeelden en uitleg.

  • jvanhambelgium
  • Registratie: April 2007
  • Laatst online: 30-11 14:23
Zorg ook maar dat de dialoog tussen uw applicatie en de DB veilig is.
Eerlijk gezegd is in cleartext data ophalen over internet geen optie volgens mij.

Als je een XML laat genereren kan je die tenminste via SSH/SCP op een veilig manier ophalen.
Zeker als je met klantendata etc werkt!

Security is NOT an option!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:28
LangeJanneman schreef op woensdag 27 juni 2007 @ 10:55:
Dus de verwachte vraag: Hoe roep ik die webservice op (aanmaken gaat wel lukken via Visual Web Developer). Ik heb ondertussen wel diverse pagina's doorgelezen maar dat gaat alleen over de webservice maken, nie over hoe te gebruiken.

ps. Probleem is dat het engels me niet helemaal glad afgaat en ik alleen zoek op nederlandstalige tutorials, voorbeelden en uitleg.
Tja .... ik zou dan zeggen: leer toch maar engels, want als het over software ontwikkeling gaat is de meeste goede documentatie in 't engels.
Over het aanroepen van webservices: er zijn genoeg tutorials / documentatie daarover te vinden. Als je gebruik maakt van VS.NET dan is het makkelijk: voeg aan web-reference toe aan je project; VS.NET zal dan een proxy object maken, dat je gebruikt om de communicatie met je WS te doen.
Gebruik je geen VS.NET, dan moet je die proxy zelf maken (adhv een command line utility - wsdl als ik me niet vergis).

https://fgheysels.github.io/


  • LangeJanneman
  • Registratie: Juni 2007
  • Laatst online: 22-07-2021
Er zal zeker geen klantendata verstuurd worden.

Het enige wat deze 'client' gaat doen is (mocht er een probleem zijn) dat deze in een veld wordt ingevoerd en bij opslaan in de database wordt gezet met enkel en alleen één nummer en dat is het ID van de PC waarop het gemeld is.

Wat uit de database gehaald moet worden zijn enkel een paar categorieen die in een dropdown list moeten komen. De reden dat dit via internet moet is omdat ze nogal eens aangepast gaan worden.

edit 1
Ik gebruik VS.NET dus die proxy dat moet dus gaan lukken. Als het in nederlands niet lukt dan gaat het engels wel maar dat duurt gewoon 3x zo lang voor ik het dan snap zeg maar.

edit 2
Het is redelijk aan het lukken alleen mijn functie zelf kan ik nog niet aanroepen. Wel "[functienaam]CompletedEventArgs()".

edit 3
Ik kan nu de functie aanroepen. Bedankt voor het wijzen in de goede richting :D.
Nu nog één vraag: Kan ik in 1 functie meer vraiabelen teruggeven?

Dus in gewone xml geschreven;
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<xml>
  <variabelen>
    <variabele>
      <id>1</id>
      <waarde>PC</waarde>
    </variabele>
    <variabele>
      <id>2</id>
      <waarde>Server</waarde>
    </variabele>
    <variabele>
      <id>3</id>
      <waarde>Printer</waarde>
    </variabele>
  </variabelen>
</xml>

[ Voor 50% gewijzigd door LangeJanneman op 27-06-2007 11:45 ]


Verwijderd

LangeJanneman schreef op woensdag 27 juni 2007 @ 11:06:
Het enige wat deze 'client' gaat doen is (mocht er een probleem zijn) dat deze in een veld wordt ingevoerd en bij opslaan in de database wordt gezet met enkel en alleen één nummer en dat is het ID van de PC waarop het gemeld is.
Wanneer je zaken gaat wegschrijven via webservices zul je toch aan een bepaald niveau van beveiliging moeten gaan denken.
edit 3
Ik kan nu de functie aanroepen. Bedankt voor het wijzen in de goede richting :D.
Nu nog één vraag: Kan ik in 1 functie meer vraiabelen teruggeven?

Dus in gewone xml geschreven;
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<xml>
  <variabelen>
    <variabele>
      <id>1</id>
      <waarde>PC</waarde>
    </variabele>
    <variabele>
      <id>2</id>
      <waarde>Server</waarde>
    </variabele>
    <variabele>
      <id>3</id>
      <waarde>Printer</waarde>
    </variabele>
  </variabelen>
</xml>
Ja, je kunt bijvoorbeeld een struct datatype teruggeven.
bijv:

C#:
1
2
3
4
5
6
7
[Serializable]
public struct Employee
{
   public Guid Id;
   public string Name;
   public DateTime DateOfBirth;
}


En voor je methode krijg je dan iets als:

C#:
1
2
3
4
5
[Webmethod]
public Employee GetEmployee(Guid id)
{
   // body
}

[ Voor 13% gewijzigd door Verwijderd op 27-06-2007 11:57 ]


  • LangeJanneman
  • Registratie: Juni 2007
  • Laatst online: 22-07-2021
Werkt dit ook net Visual Basic?

Ik heb namelijk mn hele applicatie daarin en dan is het ook wat om daar c# voor te gebruiken. Ik ga even zoeken. Bedankt voor je hulp.

Ik heb nu het volgende:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ WebService Language="VB" Class="WebService" %>

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols

<WebService(Namespace := "http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _  
Public Class WebService
    Inherits System.Web.Services.WebService 
    
    <WebMethod()> _
    Public Function getAppInfo(ByVal id As Integer, ByVal username As String, ByVal password As String) As String
        Return id
    End Function
    
    <WebMethod()> _
    Public Function getCategorie(ByVal custId As Integer) As String
        Return "Categorieen van " & custId
    End Function
End Class


Deze code geeft terug:

XML:
1
2
  <?xml version="1.0" encoding="utf-8" ?> 
  <string xmlns="http://tempuri.org/">1</string> 


Dat is dus één variabele. Wat ik me af vraag.. Hoe kan ik hier meer variabele's inzetten en weer opvragen. Zoals vieux zegt moet dat met een struct. Kan iemand hier een voorbeeldje van geven hoe struct werkt in VB.net?

[serializable] moest in ieder geval vervangen worden door <serializable>. Alleen de denkwijzen van de rest snap ik dus nog niet. Iemand uitleg?

[ Voor 78% gewijzigd door LangeJanneman op 27-06-2007 12:26 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:28
Kan je even zelf de moeite doen, en je help / MSDN erbij pakken, en zoeken op het keyword 'struct' of 'class'.
Het is niet de bedoeling dat we hier alles voorkauwen ofzo.

https://fgheysels.github.io/


  • LangeJanneman
  • Registratie: Juni 2007
  • Laatst online: 22-07-2021
Sorry als ik zo overkom. Ik ben de link aan het onderzoeken. Het meest werkt nu maar het grootste probleem is waarschijnlijk dat ik niet goed met zoekmachines omga.

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Het belangrijkste is dat je database niet direct aan het internet hangt. Als je de communicatie via een webserver laat lopen kun je veel gemakkelijker de user authroriseren. Verder zorgt je dat alle 'management' code van de database ook daadwerkelijk remote blijft. De webserver handelt dan alle inserts, update en deletes af. Als tal van applicaties jouw database direct kunnen naderen, ben je grotendeels de controle kwijt.

En of je dan een webservice of webpagina gebruikt maakt dan niet meer zoveel uit.
Op basis van deze topic raad ik je echt aan om voor de WebService optie te gaan. Je hoeft dan niet te weten hoe je variabelen worden omgezet naar xml en het resultaat vanuit xml weer wordt omgezet naar een .NET object, dit heet serialiseren.

Een totaal andere manier om je dropdowns en andere onderdelen up-to-date te houden is gewoon het gebruikt van de System.Deployment.Application namespace uit .NET 2.0 (Visual Studio 2005).

If it isn't broken, fix it until it is..


  • LangeJanneman
  • Registratie: Juni 2007
  • Laatst online: 22-07-2021
Tis me gelukt.. Na een paar dagen flink zoeken en zoeken mbv allerlei links ben ik eruit hoe WebService werkt.

Topic kan sluiten dus

  • _Apache_
  • Registratie: Juni 2007
  • Laatst online: 22:21

_Apache_

For life.

LangeJanneman schreef op vrijdag 29 juni 2007 @ 14:33:
Tis me gelukt.. Na een paar dagen flink zoeken en zoeken mbv allerlei links ben ik eruit hoe WebService werkt.

Topic kan sluiten dus
Er gaat niet zomaar een topic dicht op GoT.. ;)

Een kleine beschrijving / verslag van je bevinden is voor gebruikers die met hetzelfde zitten is erg hulpzaam..

Zero SR/S 17.3kWh / 2.7 kWP PV / Xtend WP 5kW + HRSolar zonneboiler


  • LangeJanneman
  • Registratie: Juni 2007
  • Laatst online: 22-07-2021
Uitleggen ben ik heel erg slecht in maar in het kort:

Boven de clas moest de volgende code: <serializable()> _

Visual Basic:
1
2
<serializable()> _
public class [klasse].....

Dat was nog wel te doen

Boven de functie moest de code: <WebMethod()>, logisch want dat is standaard
Visual Basic:
1
2
Webmethod()> _
public function [functienaam]


Maar dit werd telkens als string doorgegeven, dat was makkelijk op te lossen.
ipv:
Visual Basic:
1
public function [functienaam] (par1, par2) as string

Moest het dus worden:
Visual Basic:
1
public function [functienaam] (par1, par2) as integer


Dat was ook snel bedacht. Maar hoe ga je met database gegevens om? ja, als je nooit asp.NET gebruikt hebt dan moet dat uitgezocht worden. Eerst dus een poos lopen klooien met sqlCommand. Helaas, dit kon niet doorgegeven worden. Uiteindelijk terecht gekomen op sqlDataAdapter en op DataSet.

Het hele probleem is opgelost op de volgende manier:
Visual Basic:
1
2
3
4
5
6
<WebMethod()> _
public function [functienaam] (var1, var2) as DataSet
  dim dsData as DataSet
  'Hier de rest van de functie
  return dsData
end function


In mijn programma heb ik de webservice toegevoegd als webreference. Nu kan ik na de volgende code in mijn vb.NET programma:
Visual Basic:
1
dim ws as new WebService.webservice

ingevoerd te hebben de dataset oproepen met ws.tables...

Misschien dat t een klein beetje duidelijk is zo.

Als je vragen hierover hebt kan ik ze PROBEREN uit te leggen.

offtopic:
Dus nog even voor de mensen die ietwat geirriteerd werden door mijn vragen.. Hierover is niets in de msdn te vinden (althans, IK kon het niet vinden) en met struct was het probleem ook niet op te lossen.

[ Voor 8% gewijzigd door LangeJanneman op 04-07-2007 11:21 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:28
Waarom lukte het niet om een struct of class door te geven ?
Welke fouten kreeg je ? Ikzelf heb hier webservices die custom datatypes (classes) returnen; dat lukt gewoon perfect.

En welke class maak je daar (in je eerste code-fragment) van je uitleg serializable ? Ik zie je die class nergens anders gebruiken ?

Ik denk trouwens dat er hier toch wel iets moet in te vinden zijn.

https://fgheysels.github.io/


  • LangeJanneman
  • Registratie: Juni 2007
  • Laatst online: 22-07-2021
Het doorgeven wilde misschien wel lukken maar ik heb nooit eerder met structs gewerkt.

Ik heb de class serializable gemaakt zodat ik de rest niet allemaal apart hoef te doen. De functies die ik gebruik bevinden zich allemaal binnen deze class.

Die link die je daar gepost heb had ik zelf op kunnen komen maar helaas, te laat. Toch nog bedankt.
Pagina: 1