[VB6] Communiceren met VB.NET Windows Service

Pagina: 1
Acties:
  • 123 views sinds 30-01-2008
  • Reageer

  • WhiteDog
  • Registratie: Juni 2001
  • Laatst online: 31-01 21:14

WhiteDog

met zwarte hond

Topicstarter
Ik ben bepaalde functionaliteit van een VB6 applicatie aan het implementeren in een VB.NET Service (je moet een keer met je tijd mee toch :))

Ik heb dus in VB.NET 2005 een Windows Service gemaakt. Wat moet er nu gebeuren?
- De VB6 applicatie moet af en toe een kleine array opvragen bij de Service
- De VB6 applcatie moet elke seconde 2 waarden ontvangen van de Service

Ik zoek dus de beste manier om met de Service te communiceren vanuit VB6.

Mijn enige ervaring op dit vlak is een beetje spelen met de SendMessage API. Via Google vind ik alleen maar wat voorbeelden van subclassing in VB.Net. Alleen lijkt me dat niet echt bruikbaar (heeft een service wel een hwnd trouwens?).

Iemand die een duwtje in de juiste richting geeft? :)

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Staan de VB6 applicatie en de VB.NET Service op dezelfde PC? Communiceren tussen deze applicaties doe je via sockets. Voor de communicatie kun je verschillende protocollen gebruiken:
- Je eigen protocol schrijven om data uit te wisselen
- Een bestaand protocol zoals SOAP gebruiken.

Voordeel van bestaande protocollen zoals SOAP is dat deze automatisch datatypes voor je kan serializeren en de-serializeren zoals dat heet. Dit geldt ook voor Arrays. .NET heeft standaard SOAP voorzieningen, maar voor VB6 denk ik dat je een third party library moet gebruiken.

It’s nice to be important but it’s more important to be nice


  • WhiteDog
  • Registratie: Juni 2001
  • Laatst online: 31-01 21:14

WhiteDog

met zwarte hond

Topicstarter
De services draaien op dezelfde PC. Nu ik er wat over nadenk lijkt het me wel handig om ook de service op andere PC's te kunnen benaderen.

(Even de achtergrond schetsen: het betreft een service die je upload en download meet van je netwerkkaart. Het lijkt me echter wel handig om in het netwerk enkel de service te installeren op pc's en die ook remote te kunnen volgen).

Ik denk dat ik maar enkele keuzes heb, zijnde:
- Remoting (hoewel ik me afvraag hoe ik dat in VB6 moet implementeren)
- UDP (gezien de geringe hoeveelheid data de beste oplossing?)

Verwijderd

WhiteDog schreef op zondag 24 september 2006 @ 12:35:
Ik denk dat ik maar enkele keuzes heb, zijnde:
- Remoting (hoewel ik me afvraag hoe ik dat in VB6 moet implementeren)
Sockets -> UDP-TCP/IP ?
WhiteDog schreef op zondag 24 september 2006 @ 12:35:
- UDP (gezien de geringe hoeveelheid data de beste oplossing?)
UDP is snel, maar niet betrouwbaar.
Is wel bruikbaar als je de metingen zo snel mogelijk wilt hebben en je best wel wat metingen kunt missen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 13-02 22:55
Een Windows Service inherit van ServiceBase, en die heeft een method (eventhandler) OnCustomCommand die geraised wordt als er dus een Custom Command moet uitgevoerd worden.

Een ServiceControllerManager heeft een ExecuteCommand method waarmee je dus kunt aangeven dat een bepaalde service een bepaald command moet uitvoeren.
Je kan dus een ServiceControllerManager maken, en deze vanuit je VB6 app gebruiken om je Service aan te sturen.

https://fgheysels.github.io/


  • WhiteDog
  • Registratie: Juni 2001
  • Laatst online: 31-01 21:14

WhiteDog

met zwarte hond

Topicstarter
whoami schreef op zondag 24 september 2006 @ 17:11:
Een Windows Service inherit van ServiceBase, en die heeft een method (eventhandler) OnCustomCommand die geraised wordt als er dus een Custom Command moet uitgevoerd worden.

Een ServiceControllerManager heeft een ExecuteCommand method waarmee je dus kunt aangeven dat een bepaalde service een bepaald command moet uitvoeren.
Je kan dus een ServiceControllerManager maken, en deze vanuit je VB6 app gebruiken om je Service aan te sturen.
Hier ben ik me bewust van :) Het probleem is (was) dat ik niet gewoon iets wil uitvoeren, maar ook meteen iets terug krijgen. Via bv. Windows Messaging krijg je ook meteen een antwoord terug. Wat hier een probleem is omdat een service (liefst) windowless is.

Enkele mogelijkheden zijn:
- ExecuteCommand doen en de service een window message laten terugsturen (in de andere richting gaat het natuurlijk wel). Moet je alleen ergens de hWnd van je aanroepende app ergens centraal opslaan.
- In de service een fake form aanmaken en window messaging in de 2 richtingen gebruiken.

Ik ga zowieso 2 implementaties maken, eentje lokaal en een met UDP voor remote polling.

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

WhiteDog schreef op dinsdag 26 september 2006 @ 07:42:
Ik ga zowieso 2 implementaties maken, eentje lokaal en een met UDP voor remote polling.
Maak er dan gewoon 1 met alleen UDP, scheelt je ontwikkeltijd en je hebt een eenduidige interface voor je client programma's.

Nu met Land Rover Series 3 en Defender 90

Pagina: 1