[.NET] uitlezen variablen in aspx van een windows applicatie

Pagina: 1
Acties:

  • Flax
  • Registratie: Oktober 2003
  • Laatst online: 30-01 17:51
Hallo,

Mijn programma bestaat uit 2 onderdelen:
- Een .NET windows applicatie
- Een .NET web applicatie gedeelte

Nu heb ik in de web applicatie variablen nodig die in de windows applicatie gezet zijn. Momenteel serializeer ik deze weg naar een file (xml) en lees ze in met de web applicatie, maar ik vind dit zelf niet een elegante(snelle) oplossing.

Is het mogelijk om een soort shared memory aan te maken / file in geheugen / andere manier om gegevens uit te wisselen ander dan het client/server(soap) of naar file serializeren?
Ik heb dit nodig omdat .NET tijdens het opstarten van de web-engine een nieuw memory gedeelte gaat gebruiken (of zo lijkt het)

een .NET noob (mopper mopper)

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Je kan er misschien eens over nadenken om een web-service te maken die je zowel door je web als door je win applicatie benaderd.

Echter, ook bij een webservice of een remoted object zullen je gegevens op de een of andere manier (SOAP of binary) geserialiseerd worden (al gebeurt het dan achter de schermen) om ze over een channel te kunnen sturen.

Wat wil je eigenlijk precies doen ?

[ Voor 51% gewijzigd door whoami op 28-05-2004 10:07 ]

https://fgheysels.github.io/


  • Flax
  • Registratie: Oktober 2003
  • Laatst online: 30-01 17:51
Je kan er misschien eens over nadenken om een web-service te maken die je zowel door je web als door je win applicatie benaderd.
Dit betekend dus dat alle pc's waarop de software komt te draaien ook een webserver moeten hebben. Dit vind ik niet een goede oplossing.
Echter, ook bij een webservice of een remoted object zullen je gegevens op de een of andere manier (SOAP of binary) geserialiseerd worden (al gebeurt het dan achter de schermen) om ze over een channel te kunnen sturen.
Remoted Object? zou je in 1 zin -technisch- kunnen vertellen wat dit inhoud?
Wat wil je eigenlijk precies doen ?
Je kan de aspx engine aanroepen en deze gebruiken voor het parsen van aspx documenten, wat ik doe in mijn programma. Het grote probleem hiermee is alleen dat ze in een ander geheugen segment werken(sterker nog, ik moet de communicatie dll in de global assebly stoppen omdat ie ze anders niet ziet).
Toch wil ik kunnen communiceren tussen beiden.

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Flax schreef op 28 mei 2004 @ 11:23:
[...]

Dit betekend dus dat alle pc's waarop de software komt te draaien ook een webserver moeten hebben. Dit vind ik niet een goede oplossing.
Enkel de computer waarop de webservice draait moet een webserver hebben.
Remoted Object? zou je in 1 zin -technisch- kunnen vertellen wat dit inhoud?
Euh, in één zin?
Een remoted object is een object dat door verschillende applicaties kan aangeroepen worden. Zoek anders eens op google of in de MSDN op .NET remoting.

https://fgheysels.github.io/


  • Flax
  • Registratie: Oktober 2003
  • Laatst online: 30-01 17:51
Enkel de computer waarop de webservice draait moet een webserver hebben.
Het is niet echt een optie om een iis-server hiervoor op te tuigen. Waarom zou ik een iis introduceren terwijl ik deze in mijn huidige opzet ook niet nodig heb(waarom zou ik uberhaubt een server moeten hebben)
Een remoted object is een object dat door verschillende applicaties kan aangeroepen worden. Zoek anders eens op google of in de MSDN op .NET remoting.
Als ik het goed heb gelezen is het bijna hetzelfde als een webservice, alleen dan heb ik geen iis nodig(dus communicatie op machine zelf)?

Zijn er ook nog andere opties?

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Welke webserver gebruik je nu dan voor je ASP.NET app? Die is toch al opgetuigd of ligt het nu aan mij?

Om welke reden heb je uberhaupt een webapp gemaakt? Als die alleen gebruikt wordt voor lokale display redenen, dan is dat wel een beetje overkill.

Maar los hiervan, je hoeft .NET Remoting niet perse als een webservice te implementeren. Je kunt ook een Remote Object maken die op soortgelijke wijze werkt als DCom vroegah. Maar goed, als je een .NET Noob bent, kun je misschien beter focussen op het leren van .NET voordat je jezelf op de (relatief) ingewikkelde materie van het maken van distributed components stort. En dan is dat serializen via een XML bestand helemaal zo slecht nog niet.

edit:

typo...

[ Voor 3% gewijzigd door bigbeng op 28-05-2004 12:02 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
bigbeng schreef op 28 mei 2004 @ 12:01:
Welke webserver gebruik je nu dan voor je ASP.NET app? Die is toch al opgetuigd of ligt het nu aan mij?
Goed punt idd. Als je een ASP.NET app hebt, dan zal die ook wel door IIS gehost worden.

https://fgheysels.github.io/


  • Flax
  • Registratie: Oktober 2003
  • Laatst online: 30-01 17:51
bigbeng schreef op 28 mei 2004 @ 12:01:
Welke webserver gebruik je nu dan voor je ASP.NET app? Die is toch al opgetuigd of ligt het nu aan mij?
Nee, ik roep de engine die de parsing doet van aspx-en. Dit is standaard .NET functionaliteit en heb je dus geen webserver voor nodig
Om welke reden heb je uberhaupt een webapp gemaakt? Als die alleen gebruikt wordt voor lokale display redenen, dan is dat wel een beetje overkill.
Ik doe dit om vanuit templates pagina's te generen(vond het het een leuke manier). ps: wat is zwaar?
Maar los hiervan, je hoeft .NET Remoting niet perse als een webservice te implementeren. Je kunt ook een Remote Object maken die op soortgelijke wijze werkt als DCom vroegah.
Thanx, ik denk dat het dan wel lukt!

[quote]
Maar goed, als je een .NET Noob bent, kun je misschien beter focussen op het leren van .NET voordat je jezelf op de (relatief) ingewikkelde materie van het maken van distributed components stort. En dan is dat serializen via een XML bestand helemaal zo slecht nog niet.
[quote]
Distributed components is een bekend design pattern :D. Ik weet weinig van .NET af in termologie, syntax, geheugen management, garbage collecting, etc. Wel weet ik dat ik het toch een keer moet leren.

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Flax schreef op 28 mei 2004 @ 12:13:
[...]

Nee, ik roep de engine die de parsing doet van aspx-en. Dit is standaard .NET functionaliteit en heb je dus geen webserver voor nodig
Euh? Kan je dat eens verder toelichten?

https://fgheysels.github.io/


  • Flax
  • Registratie: Oktober 2003
  • Laatst online: 30-01 17:51
whoami schreef op 28 mei 2004 @ 12:15:
[...]

Euh? Kan je dat eens verder toelichten?
Zoek eens op google of in de MSDN op System.Web.Hosting.ApplicationHost.CreateApplicationHost(...) ;)

hieronder de code om een pagina op te halen (gesimplificeerd)
code:
1
2
_Host  = (AspHost)ApplicationHost.CreateApplicationHost(typeof(AspHost), _virtualPath, _physicallPath );
_Host.generate(...);


code:
1
2
3
4
5
6
7
8
9
10
11
12
    class AspHost: MarshalByRefObject
    {
        public AspHost() 
        {
            GetInstallPathAndConfigureAspNetIfNeeded();
        }
        public bool generate(.....){
            ....
            System.Web.HttpRuntime.ProcessRequest(...);
            ...
                }
    }


voor gehele sourcecode even melden, dan meel ik het wel

ps: Hebben ze in .NET trouwens ook muliple inheritance? ;)

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Als je daarmee aspx pagina's kunt hosten, zal je er ook wel een webservice mee kunnen hosten denk ik.

https://fgheysels.github.io/


  • Flax
  • Registratie: Oktober 2003
  • Laatst online: 30-01 17:51
whoami schreef op 28 mei 2004 @ 12:40:
Als je daarmee aspx pagina's kunt hosten, zal je er ook wel een webservice mee kunnen hosten denk ik.
Ik host niks, ik genereer documenten uit een template :D
Ik wil geen webservice, want dan moet ik een iis op computers installeren (dit programma komt op meerdere losse pcs te draaien)

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Flax schreef op 28 mei 2004 @ 12:45:
[...]


Ik host niks, ik genereer documenten uit een template :D
Ik wil geen webservice, want dan moet ik een iis op computers installeren (dit programma komt op meerdere losse pcs te draaien)
ApplicationHost.CreateApplicationHost Method [C#]
Creates and configures an application domain for hosting ASP.NET
Hiermee kan je dus asp.net app's en asp.net webservices hosten vermoed ik.

https://fgheysels.github.io/


  • Flax
  • Registratie: Oktober 2003
  • Laatst online: 30-01 17:51
Flax schreef op 28 mei 2004 @ 12:13:
[...]
Thanx, ik denk dat het dan wel lukt!
[...]
Mopper, nog steeds niet. Kan iemand mij vertellen hoe ik de volgende classe vervang door remoting? (of is er een andere manier?)
Ik ben met remoting bezig geweest, maar elke keer lijkt het of ik veel te veel code gebruik(en security exceptions krijg).
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Data;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;

namespace AspParser
{
    public class AspParserContext 
    {
        //TODO: make thread save
        //TODO: remove the save to file, and keep it all in memory (if possible)

        private const string SERIALIZE_FILE = "~AspParser.tmp";

        public static void setVariable(Object var)
        {
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(SERIALIZE_FILE, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
            formatter.Serialize(stream, var);
            stream.Close();
        }
        public static Object getVariable()
        {
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(SERIALIZE_FILE, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            Object var =  formatter.Deserialize(stream);
            stream.Close();
            return var;
        }
    }
}

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Als je een remoted object wil maken, dan moet je die class van MarshalByRefObj inheriten.
Je hebt een applicatie nodig die het object 'host'.

Kijk ook even naar de System.Runtime.Remoting namespace, naar de classes RemotingConfiguration, etc...

Als je security exceptions krijgt, moet je eens kijken door wat ze veroorzaakt zijn en de security policies eens bekijken.

https://fgheysels.github.io/


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Had je dit (of een vergelijkbaar) artikel al eens gelezen?
http://msdn.microsoft.com...LeaseManager/default.aspx

Zo ja, dan deze post negeren ;)

Never underestimate the power of


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
cameodski schreef op 02 juni 2004 @ 13:12:
Had je dit (of een vergelijkbaar) artikel al eens gelezen?
http://msdn.microsoft.com...LeaseManager/default.aspx

Zo ja, dan deze post negeren ;)
Hmm, dat heeft natuurlijk wel met remoting enzo te maken, maar als je het object nog niet 'remoted' krijgt, is dit nog niet van toepassing.

https://fgheysels.github.io/


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Flax schreef op 02 juni 2004 @ 12:28:
[...]

Mopper, nog steeds niet. Kan iemand mij vertellen hoe ik de volgende classe vervang door remoting? (of is er een andere manier?)
Ik ben met remoting bezig geweest, maar elke keer lijkt het of ik veel te veel code gebruik(en security exceptions krijg).
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Data;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;

namespace AspParser
{
    public class AspParserContext 
    {
        //TODO: make thread save
        //TODO: remove the save to file, and keep it all in memory (if possible)

        private const string SERIALIZE_FILE = "~AspParser.tmp";

        public static void setVariable(Object var)
        {
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(SERIALIZE_FILE, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
            formatter.Serialize(stream, var);
            stream.Close();
        }
        public static Object getVariable()
        {
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(SERIALIZE_FILE, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            Object var =  formatter.Deserialize(stream);
            stream.Close();
            return var;
        }
    }
}
Kun je het nie beter zo oplossen :? :
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Data;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;

namespace AspParser
{
    public class AspParserContext 
    {
        //TODO: make thread save
        //TODO: remove the save to file, and keep it all in memory (if possible)

        private const string SERIALIZE_FILE = "~AspParser.tmp";

        public static Object Variable()
        {
            get
            {
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(SERIALIZE_FILE, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            Object var =  formatter.Deserialize(stream);
            stream.Close();
            return var;
            }
            set
            {
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(SERIALIZE_FILE, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
            formatter.Serialize(stream, value);     //value is de waarde die je aan je functie meegeeft
            stream.Close();         //dus bij classe.var = 5 is 5 de value
            }
        }
    }
}

Dus met get en set, dit is wat makkelijker en volgens mij ook sneller. Met value kun je de waarde uitlezen die je eraan meegeeft.

[ Voor 3% gewijzigd door eghie op 02-06-2004 13:43 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Mjah, dat zijn properties gebruiken ipv 'gewone' getters/setters; het is wel netter vind ik maar eigenlijk is het gewoon syntactische suiker.
Waarom het sneller zou zijn, zou ik niet weten.

https://fgheysels.github.io/


  • Flax
  • Registratie: Oktober 2003
  • Laatst online: 30-01 17:51
eghie schreef op 02 juni 2004 @ 13:40:
[...]

Kun je het nie beter zo oplossen :? :
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[...]
        public static Object Variable()
        {
            get
            {
[...]
            }
            set
            {
[...]
            }
        }
    }
}

[...]
Bedankt voor de tip!

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
whoami schreef op 02 juni 2004 @ 13:17:
[...]


Hmm, dat heeft natuurlijk wel met remoting enzo te maken, maar als je het object nog niet 'remoted' krijgt, is dit nog niet van toepassing.
Stond mij bij dat er wel een aardig compleet voorbeeld bij zat, maar dat is dan blijkbaar een inconsistentie in mijn harde hersenschijf ;)

Never underestimate the power of


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Nouja, ik heb het ook niet volledig gelezen hoor. :o

Maar op de MSDN staan er iig een hele hoop voorbeelden / artikelen ivm webservices en .NET remoting.

https://fgheysels.github.io/

Pagina: 1