Toon posts:

[.NET] Services

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

Verwijderd

Topicstarter
Ik heb dus een programma die met plugins werkt. Input plugins die willekeurige data gaan halen en output plugins die deze gefilterde data doorsturen.
De filter controleert de waarden in de xml-dataset ( verkregen door de inputplugin) tegenover in te stellen drempelwaardes.
De bedoeling is dat je een oneindig aantal combinaties kan maken uit deze plugins.
Het is dus een systeem die gegevens uit een bedrijf analyseert en indien nodig rapporteert. (bvb naar email, logfile,...)
Nu komt het probleem :
Ik heb dus een gsm-modem die aan de seriële poort hangt. Het is al mogelijk om met deze modem sms'jes te versturen.
Aangezien het programma meerdere plugins zal gebruiken moeten die allemaal aan die gsm-modem kunnen maar je kan die poort maar éénmaal opendoen.
Het moet ook mogelijk zijn voor een sms-input-plugin om te filteren op een kernwoord (zoals op tv...sms HOT naar 3310). Maar het moet ook mogelijk zijn om een sms te sturen als er ergens iets moet gerapporteert worden.
Dit gezegd zijnde...

Ik heb dus geprobeerd om een sms service te laten draaien die in verbinding staat met de modem. Dit dan met .NET remoting proberen aan te spreken maar de threads die gebruikt worden in de seriële klasse zijn niet serializable. Dus dit werkt niet.
M'n volgende gedacht is om in een directory xml bestanden te schrijven die de service dan controleert en verstuurt. En omgekeerd, als er een sms toekomt, een xml schrijft in een directory die m'n plugin dan controleert.
Mijn vraag : is dit niet te omslachtig om met bestanden te werken? Zijn er geen betere manieren om met een service te communiceren?

Verwijderd

Topicstarter
niemand?
hmmm, misschien een beetje rare uitleg :)

Dan maar de vraag beetje algemener stellen:
Hoe communiceert men in het algemeen met services, is dat client/server of zijn er nog andere mogelijkheden?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Je kan mbhv de ServiceController class een service op je PC (of op een andere PC) aanspreken.
Die class heeft een member method 'ExecuteCommand' waarmee je een bepaalde taak kunt laten uitvoeren door die service. Je Service moet dan natuurlijk wel de OnCustomCommand method overriden.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Die ServiceController lijkt me alleen geschikt om de service iets te laten doen, niet om data terug te krijgen.
Is tuurlijk wel handig om programmatisch je service te stoppen, starten enzo...
Zal ik zeker nog in m'n programma steken.

Misschien is het simpelste gewoon een server op een bepaalde poort laten draaien in de service. En dan in de sms plugin gewoon een client die connecteert.

  • pgussow
  • Registratie: Maart 2003
  • Laatst online: 18-08-2025
Dat lijkt mij ook de meest simpele manier. Helemaal omdat je dan heel erg flexibel bent. Je kunt dan ook via het netwerk remote die service aanspreken. Maar ook eventueel via een standaard inet verbinding. Al moet je dan natuurlijk wel heel erg over security nadenken :P

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Als je Data wilt terugkrijgen, kan je misschien eens kijken naar .NET remoting.

Je maakt dan een 'remoting object', dat je host in je Service. De client-applicatie maakt dan een verbinding met het remoting object. Je kan dan methods aanroepen van dat object die data teruggeven.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Als je Data wilt terugkrijgen, kan je misschien eens kijken naar .NET remoting.
Heb ik geprobeerd, staat in m'n openingspost. Ging een mooie oplossing geweest zijn maar de threads in de sms klasse zijn niet serializable.
Bedankt voor de reacties, ik gahet simpel houden en client/server erin steken.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Wat bedoel je met 'de threads in de SMS klasse zijn niet serializable'?
Dan maak je je class toch gewoon serializeable (als je dat kan natuurlijk). Anders maak je je eigen class die zo'n SMS object gebruikt, en implementeer je de ISerializable interface voor jouw class. (Adapter pattern).

https://fgheysels.github.io/


Verwijderd

Topicstarter
Probleem is dat die sms klasse slechts éénmaal mag geïnstantieerd worden want die staat in verbinding met de seriële poort.

Wat ik bedoel met die threads die niet serializable zijn is :
de sms klasse bevat threads en de klasse Thread is op zich niet serializable dus is het ook onmogelijk om die sms klasse serializable te maken. (of ben ik nu verkeerd?)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:18

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 15 januari 2004 @ 16:10:
Probleem is dat die sms klasse slechts éénmaal mag geïnstantieerd worden want die staat in verbinding met de seriële poort.
Daar heb je toch een Singleton pattern voor? :?
Wat ik bedoel met die threads die niet serializable zijn is :
de sms klasse bevat threads en de klasse Thread is op zich niet serializable dus is het ook onmogelijk om die sms klasse serializable te maken. (of ben ik nu verkeerd?)
Kan je dan niet een wrapperclass schrijven voor die class?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
gorgi_19 schreef op 15 januari 2004 @ 16:12:
[...]

Kan je dan niet een wrapperclass schrijven voor die class?
Ja dat dacht ik ook.

Als je de ISerializable interface implementeert, dan kan je zelf specifieren welke members je wilt serializen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Daar heb je toch een Singleton pattern voor?
Dat kan je instellen als je met remoting werkt, das dus het probleem niet.
Kan je dan niet een wrapperclass schrijven voor die class?
Die moet dan toch nog altijd serializable zijn? Gaat dat dan wel als de binnenste klasse niet serializable is?

Edit :
Als je de ISerializable interface implementeert, dan kan je zelf specifieren welke members je wilt serializen.
Maar als je met remoting werkt dan maak je in feite een instantie van een remote object, werkt die dan wel als niet alle members meegestuurd (door serialize) worden?

[ Voor 36% gewijzigd door Verwijderd op 15-01-2004 16:23 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:18

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 15 januari 2004 @ 16:20:
[...]
Die moet dan toch nog altijd serializable zijn? Gaat dat dan wel als de binnenste klasse niet serializable is?
Een wrapper hoeft imho niet altijd een class te inheriten
whoami schreef op 15 januari 2004 @ 16:17:
[...]


Ja dat dacht ik ook.

Als je de ISerializable interface implementeert, dan kan je zelf specifieren welke members je wilt serializen.
Je kan voor bepaalde vars ook de <nonserializable> - ding (geen idee hoe zoiets heet) zetten, wordt deze ook niet meegenomen en kan je voor de class <serializable> zetten.

[ Voor 46% gewijzigd door gorgi_19 op 15-01-2004 16:24 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 15 januari 2004 @ 16:20:

Die moet dan toch nog altijd serializable zijn? Gaat dat dan wel als de binnenste klasse niet serializable is?
Die maak je Serializable, en je serializeert je 'binnenste' klasse.

code:
1
2
3
4
5
6
7
8
9
MyClass : ISerializable
{
    private  SMSSpul    _blaat;

    protected void GetObjectData( SerializationInfo info, StreamContext context )
    {
         info.Add ("blaat", _blaat);
    }
}


Code is uit de losse pols, maar je begrijpt het idee wel
Merk wel op dat je nog een speciale constructor nodig hebt om te kunnen deserializen.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
gorgi_19 schreef op 15 januari 2004 @ 16:22:
[...]

Een wrapper hoeft imho niet altijd een class te inheriten
Als je een class zou inheriten van een andere class, zou het imo geen wrapper class zijn. :P
Imo spreek je van een wrapper class als je gebruik maakt van 'composition' ipv 'inheritance'. (Adapter pattern dus).
Je kan voor bepaalde vars ook de - ding (geen idee hoe zoiets heet) zetten, wordt deze ook niet meegenomen.
Een attribuut heet zo'n ding. :P
Het nadeel van het Serializable() attribuut is wel dat enkel de public members geserialized worden. Dat is fijn voor bepaalde gevallen, maar als je wat meer 'custom' wilt werken, moet je toch de ISerializable interface gebruiken.

https://fgheysels.github.io/


  • Juicy
  • Registratie: December 2000
  • Laatst online: 05:27
Ik begrijp zo-ie-zo de toepassing uit je beginpost niet ... maar dat terzijde.

Je kunt mbv .Net remoting een singleton maken, die eventueel in een service leeft. Deze heeft dan direct toegang tot de SMS plugin. De singleton zorgt verder voor het beheer van het SMS component.

Commando's die uitgevoerd kunnen worden kunnen dan doorgegeven worden aan het singleton object die deze dan op zijn beurt serieel uitvoerd. Eventuele output kan met behulp van een event terug gerapporteerd worden.

Begrijp ook niet waarom je in hemelsnaam dat SMS component wil serializen ?!

[ Voor 9% gewijzigd door Juicy op 15-01-2004 16:33 ]

-


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Juicy schreef op 15 januari 2004 @ 16:32:
Begrijp ook niet waarom je in hemelsnaam dat SMS component wil serializen ?!
objecten die je remoting class teruggeeft, moeten serializable zijn. Je moet ze immers over een channel sturen.
Nu weet ik natuurlijk ook niet of die SMS class wordt teruggeven naar de client (of omgekeerd ofzo).

[ Voor 15% gewijzigd door whoami op 15-01-2004 16:34 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Juicy schreef op 15 januari 2004 @ 16:32:
Begrijp ook niet waarom je in hemelsnaam dat SMS component wil serializen ?!
In mij applicatie zijn er dus plugins die met sms kunnen werken. Aangezien ik maar 1 gsm modem heb moeten ze dus allemaal met dezelfde werken.
Plugins worden samengevoegd in een module die dan een bepaalde taak uitvoert, bvb een sms zenden. Het is dus mogelijk om een 'oneindig' aantal van deze modules aan te maken met elk een verschillende toepassing.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 15 januari 2004 @ 16:20:
[...]

Maar als je met remoting werkt dan maak je in feite een instantie van een remote object, werkt die dan wel als niet alle members meegestuurd (door serialize)
worden?
Nee, je maakt lokaal een proxy object. Dat proxy object gaat er dan voor zorgen dat de juiste implementaties aangeroepen worden aan de 'serverkant'.
Lees ook eens iets over client-side activated, en server-side activated remoted objects.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 15 januari 2004 @ 16:37:
[...]

In mij applicatie zijn er dus plugins die met sms kunnen werken. Aangezien ik maar 1 gsm modem heb moeten ze dus allemaal met dezelfde werken.
Plugins worden samengevoegd in een module die dan een bepaalde taak uitvoert, bvb een sms zenden. Het is dus mogelijk om een 'oneindig' aantal van deze modules aan te maken met elk een verschillende toepassing.
Maar dan moet je SMS class toch niet serializable zijn? De remoting class (die je inherit van MarshallByRefObj) moet -voor zover ik me nog goed herinner- niet serializable zijn.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 15 januari 2004 @ 16:38:
[...]


Nee, je maakt lokaal een proxy object. Dat proxy object gaat er dan voor zorgen dat de juiste implementaties aangeroepen worden aan de 'serverkant'.
Lees ook eens iets over client-side activated, en server-side activated remoted objects.
Dan is het probleem opgelost, ik moet dan alleen de zaken serializen die de client 'nodig' heeft.
Zal nu beginnen lezen :)
Pagina: 1