maximaal aantal applicaties in database toelaten

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 13-09 21:05
Misschien een warrige titel, maar ik zt met het volgende:

ik sta op het punt een applicatie te maken (details doen er niet toe) die verbinding maakt met een database (MSDE). Deze applicatie mag slechts van bijvoorbeeld drie PC's worden opgestart omdat de klant voor drie licenties betaald. Ik wil dit op 1 of andere manier regelen, zonder dat hij een kloon kan maken van een werked station en zo een vierde in het leven roept.

ik kan bij het opstarten een tabel in de database wegschrijven en dit ook doen bij het afsluiten van de applicatie. Als er zich een vierde station aanmeldt, wordt dit geweigerd. Echter gaat dit mis als de applicatie om welke reden dan ook crasht (geen netwerkverbinding, MSDE niet bereikbaar is, noem het maar op). Dan zal de applicatie na herstel niet meer opstarten.

Wat zou hiervoor nou een goede werkwijze zijn om het gewenste resultaat te behalen ? Wat zijn jullie ervaringen hierin ?

Acties:
  • 0 Henk 'm!

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23:46

NetForce1

(inspiratie == 0) -> true

Wat je zou kunnen doen is een timestamp opnemen in die tabel, en dan elke x tijd verversen. Andere opties zijn om een license-server te maken, of een soort peer-to-peer model om het aantal draaiende instanties te tellen.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Acties:
  • 0 Henk 'm!

  • xtra
  • Registratie: November 2001
  • Laatst online: 28-08 18:14
Geen ervaring. Ik hou van onbeperkt.

Je kunt ervoor zorgen dat jouw applicatie zich minimaal 1 keer per n minuten meldt bij de DB. Crasht de PC dan kun je na n minuten weer een werkstation vrijgeven. Als zich meer werkstations zich melden dan toegestaan dan krijg je een blokkade. Alleen een beetje irritant als ze een deadline hebben die afhankelijk is van jouw applicatie.

Je kunt evt. gebruik maken van het SID van de PC of van een eigen gegenereerde code. Ieder werkstation meldt zich dan uniek aan. Evt. weer met een tijdslimiet zodat ze de mogelijkheid hebben van PC te switchen bij uitval.

Acties:
  • 0 Henk 'm!

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 13-09 21:05
ik hou ook van onbeperkt, maar niet als het mij brood kost/oplevert.

ik heb nog het volgende idee:
als ik voor iedere applicatie een user aanmaak in MSDE (user_1,user_2 en user_3) en ik bij het opstarten van de applicatie de Stored Procedure sp_who2 oproep, dan zie ik dat user_2 al is ingelogd. Als de applicatie crasht, zal hij ook uit de lijst verdwijnen.

nadeel is dan wel, kom ik net achter, dat dit alleen werkt als je een permanente databaseverbinding hebt.

[ Voor 12% gewijzigd door pkouwer op 10-07-2009 22:18 ]


Acties:
  • 0 Henk 'm!

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 13-09 21:05
iemand nog tips ?

Acties:
  • 0 Henk 'm!

  • DamadmOO
  • Registratie: Maart 2005
  • Laatst online: 19:31
Maak gebruik van hardware keys als je echt maar 3 applicaties wilt gebruiken. Als dat te duur is kan je beter een hostname + ip koppeling gebruiken dan een username. Tenminste dat lijkt mij.

Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

Het kan ook simpeler. Schrijf bij het starten van de applicatie een entry naar de database met een uniek nummer (bv. opgebouwd uit computernaam en ip-adres) en een status (bv. "actief"). Vervolgens laat je de applicatie checken hoeveel records de status "actief" hebben. Zijn er meer dan 3 actieve records dan sluit de applicatie zich weer.
Als je de applicatie afsluit update je ook altijd het record van die client met de status "inactief".

In theorie kan een applicatie dan crashen. Gevolg is dat de status in de database op "inactief" blijft staan en er geen nieuw station meer kan inloggen. De oplossing is dan simpel: Start de applicatie op het gecrashte station een keer, die zal z'n eigen record updaten, en hij zal de status in de database weer op "inactief" zetten als ie weer op de correcte wijze wordt gesloten.

Dit levert pas problemen op wanneer een computer volledig crasht en niet meer tot leven is te brengen omdat ie dan ook niet meer gebruikt kan worden om z'n eigen record in de database op inactief te zetten.
Zelfs dan is de oplossing niet zo moeilijk: De applicatie kan gewoon op een andere PC geinstalleerd worden zolang die maar dezelfde naam en IP-adres als de oude krijgt. Dat is ook een redelijke beveiliging tegen misbruik aangezien je nu eenmaal niet twee PC's met dezelfde naam en IP-adres op hetzelfde netwerk kunt hebben.

Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

flexlm?

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 13-09 21:05
ik heb het nu zo gemaakt:

ik heb een tabe stations met de daarin bekende (lees: betaalde) werkstations. Bij het opstarten kijk ik middels een StoredPrcedure, naar de loginnaam van het station. Als deze voorkomt in de tabel, is hij betaald en door mij geconfigureerd (software is nl. maatwerk). Zo niet, wordt het direct afgekapt.

Als hij in de tabel voorkomt, kijk ik in SQL-server of er al een sessie is geopend onder deze naam. Als dat zo is, dan wordt het eveneens afgesloten, zo niet is er geen vuiltje aan de lucht en mag er worden doorgestart..

Acties:
  • 0 Henk 'm!

Verwijderd

pkouwer schreef op zaterdag 11 juli 2009 @ 19:40:
ik heb het nu zo gemaakt:

ik heb een tabe stations met de daarin bekende (lees: betaalde) werkstations. Bij het opstarten kijk ik middels een StoredPrcedure, naar de loginnaam van het station. Als deze voorkomt in de tabel, is hij betaald en door mij geconfigureerd (software is nl. maatwerk). Zo niet, wordt het direct afgekapt.

Als hij in de tabel voorkomt, kijk ik in SQL-server of er al een sessie is geopend onder deze naam. Als dat zo is, dan wordt het eveneens afgesloten, zo niet is er geen vuiltje aan de lucht en mag er worden doorgestart..
Alleen als een PC nu crasht, dan zit je wel met de gebakken peren. Die sessie blijft actief. Misschien zou je er een timeout op kunnen zetten, zoals eerder al gemeld: de applicatie moet eens in de zoveel tijd kenbaar maken dat hij nog actief is anders wordt de sessie afgebroken.

Imho lijkt het niet verstandig dat een applicatie vanaf de gecrashte pc opgestart moet worden om vervolgens de sessie te kunnen afsluiten. Je moet dan ook bijhouden vanaf welke PC een applicatie gestart is. Dit gedrag past meer bij een server.

Acties:
  • 0 Henk 'm!

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 13-09 21:05
Verwijderd schreef op maandag 13 juli 2009 @ 15:55:
[...]


Alleen als een PC nu crasht, dan zit je wel met de gebakken peren. Die sessie blijft actief. Misschien zou je er een timeout op kunnen zetten, zoals eerder al gemeld: de applicatie moet eens in de zoveel tijd kenbaar maken dat hij nog actief is anders wordt de sessie afgebroken.

Imho lijkt het niet verstandig dat een applicatie vanaf de gecrashte pc opgestart moet worden om vervolgens de sessie te kunnen afsluiten. Je moet dan ook bijhouden vanaf welke PC een applicatie gestart is. Dit gedrag past meer bij een server.
als de applicatie wordt afgesloten of gecrashed dan zorgt SQL-server dat ook deze sessie wordt verwijderd. Met de query die ik nu heb moet ik inderdaad de hostname gebruiken, maar dat is puur een SQL-kwestie.
Pagina: 1