[.NET Remoting] Probleem met opstarten server

Pagina: 1
Acties:

  • Mottebelke
  • Registratie: Juni 2001
  • Laatst online: 22-05 13:46
Ik ben bezig met het maken van een client-server applicatie.
Ik heb inmiddels al het server gedeelte gemaakt, maar daar ontstaat een probleem. Onder een click event heb ik de code gehangen voor het opstarten van de server:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        private void button1_Click(object sender, System.EventArgs e)
        {
            IDictionary properties = new Hashtable();
            properties.Add("port", 8811);

            BinaryServerFormatterSinkProvider prov = 
             new BinaryServerFormatterSinkProvider();
            prov.TypeFilterLevel =  TypeFilterLevel.Full;

            BinaryClientFormatterSinkProvider clientprov = 
             new BinaryClientFormatterSinkProvider();

            TcpChannel chan = new TcpChannel(properties,clientprov,prov);
            ChannelServices.RegisterChannel(chan);
            RemotingConfiguration.RegisterWellKnownServiceType(
                Type.GetType("TestServer.Form,Form"),"TestServer",
                WellKnownObjectMode.Singleton);
            label1.Visible = true;
        }


En dit is de foutmelding die ik krijg als ik het progje run:
An unhandled exception of type 'System.ArgumentNullException' occurred in mscorlib.dll

Additional information: Value cannot be null.
Hier kan ik niet veel uithalen. Het enige dat ik wel weet is dat de fout in de regel met RemotingConfiguration.RegisterWellKnownServiceType zit.

Heeft iemand enig idee wat ik fout doe? Want volgens de voorbeelden in MSDN heb ik toch alles goed gedaan.

  • Rolgordijn
  • Registratie: Januari 2000
  • Laatst online: 30-06-2022
Controleer eens of je GetType deze exceptie niet op levert.

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:52
Op welke lijn krijg je die exceptie?
Probeer hem ook eerst eens op te starten zonder gebruik te maken van die Formatters. Trouwens, ik vraag me af of een TcpChannel al niet by default een binary formatter gebruikt.

Ik vraag me trouwens ook af wat je precies als server object probeert te hosten? toch geen windows - form? De objecten die je host moeten inherited zijn van MarshalByRefObj

[ Voor 30% gewijzigd door whoami op 04-09-2004 13:52 ]

https://fgheysels.github.io/


  • Mottebelke
  • Registratie: Juni 2001
  • Laatst online: 22-05 13:46
Het lijkt er inderdaad op dat het probleem in de Type.GetType functie zit. Enig idee wat dat kan zijn?

Form is trouwens de naam van de class en niet een Windows Form.

  • Rolgordijn
  • Registratie: Januari 2000
  • Laatst online: 30-06-2022
Controleer even of je Assemblyname ook echt "Form" is en dat deze assembly beschikbaar is in de directory van initialiserende applicatie (waarschijnlijk heb je niks met Probing of de GAC gedaan).

Maar, misschien is het een stuk makkelijker om meer gebruik te maken van de remotingfaciliteiten die door het Framework worden geboden. Je kan je remotingobjecten zonder veel code configureren en initialiseren. Dit doe je d.m.v. de static method "Configure" van de "System.Runtime.Remoting.RemotingConfiguration" class.

Voor een goed voorbeeld moet je eens naar dit MSDN artikel kijken: Host a Remote Object in a Windows Service.

[ Voor 3% gewijzigd door Rolgordijn op 04-09-2004 22:25 ]


  • Mottebelke
  • Registratie: Juni 2001
  • Laatst online: 22-05 13:46
Het lijkt er op dat de Assembly van de Form class niet bestaat in de applicatie directory.
En dat terwijl ik gewoon de class heb toegevoegd aan het project. Doe ik hier iets fout?

BTW, ik heb de naam Form maar even veranderd naar TestForm, om zeker te zijn dat Form geen protected keyword is.

  • Rolgordijn
  • Registratie: Januari 2000
  • Laatst online: 30-06-2022
Als je met Visual Studio werkt moet je even de properties van je Project bekijken (klik rechts op je project en selecteer Properties). In het Property scherm zie je onder "Common Properties/General" de "Assembly name". Vaak gebeurt het dat je Assembly niet langer de verwachte naam heeft.

Als je een reference naar deze assembly aanmaakt zal Visual Studio deze normaal gesproken naar de output directory van het referende project kopieren. Als dat niet gebeurt moet je in de "Solution Explorer" even de References folder van je project openen. Selecteer daar de reference van je remoteobject. Controleer in het propertiesscherm van deze references of "Copy local" op true staat.

In principe maakt het niet uit dat jouw class Form heet, dat begint pas problemen op te leveren als een using statement naar "System.Windows.Forms" aanwezig is. Dat wil natuurlijk niet zeggen dat het de beste keuze voor een class naam is :)

  • Mottebelke
  • Registratie: Juni 2001
  • Laatst online: 22-05 13:46
Het probleem was inderdaad dat de reference niet op Copy Local stond. Dat heb ik veranderd en nu werkt hij wel.

Bedankt allemaal!
Pagina: 1