Avatar billede brian0905 Nybegynder
20. juni 2003 - 21:41 Der er 8 kommentarer og
1 løsning

Remoting giver en remotingexception

Jeg sidder og kigger lidt på remoting og er løbet ind i et problem. Jeg får en fejl hver gang klienten kalder op mod serveren. Om det er serveren der reelt genererer fejlen eller om det er klienten der laver fejlen (det hælder jeg mest til), det kører på interfaces:

Den fejl jeg får:

System.Runtime.Remoting.RemotingException: Attempted to create well-known object of type GeneralInterface.GeneralInformation.  Well known objects must derive from the MarshalByRefObject class

Mit Interface:

using System;
using System.Collections;

namespace GeneralInterface
{
    public interface GeneralInformation
    {
        ArrayList getAvailableModules();
        string getServerVersion();
    }
}

Min Server:

public void startServer()
        {
            TcpServerChannel tsc = new TcpServerChannel(8228);
            ChannelServices.RegisterChannel(tsc);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(GeneralInformation)
                , "CollaborationServer" , WellKnownObjectMode.Singleton);
            liste.Items.Add("Server running...");
        }

Min klient:

private void button1_Click_1(object sender, System.EventArgs e)
        {
            ChannelServices.RegisterChannel( new TcpClientChannel());
            generalint = (GeneralInformation)Activator.GetObject(typeof(GeneralInformation)
                , "tcp://localhost:8228/CollaborationServer");
            if ( generalint == null )
            {
                textBox1.AppendText("TCP SERVER OFFLINE ...PLEASE TRY LATER");
                return ;
            }
            generalint.getServerVersion();
        }

Håber der er nogle der kan hjælpe mig med denne her
Avatar billede nielslbeck Nybegynder
20. juni 2003 - 21:48 #1
Nu kan vi ikke se CollaborationServer - men som fejlen siger, skal den nedarve fra MarshalByRefObject:

public class CollaborationServer : MarshalByRefObject {
  ...
}
Avatar billede brian0905 Nybegynder
20. juni 2003 - 21:51 #2
Så vidt jeg forstår den efterfølgende kode så gør jeg det, men den brokker sig stadig:

using System;
using System.Windows.Forms;
using System.Collections;
using GeneralInterface;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels ;
using System.Runtime.Remoting.Channels.Tcp;

namespace CollaborationServer
{
    /// <summary>
    /// Summary description for Server.
    /// </summary>
    public class Server : MarshalByRefObject, GeneralInformation
    {
        ListBox liste= new ListBox();
        public Server(ListBox minListe)
        {
            liste=minListe;
            liste.Items.Add("Invoking server...");
        }

        public ArrayList getAvailableModules()
        {
            return null;
        }

        public string getServerVersion()
        {
            return "1.1.1.0.23564578";
        }

        public void startServer()
        {
            TcpServerChannel tsc = new TcpServerChannel(8228);
            ChannelServices.RegisterChannel(tsc);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(GeneralInformation)
                , "CollaborationServer" , WellKnownObjectMode.Singleton);
            liste.Items.Add("Server running...");
        }

    }
}
Avatar billede nielslbeck Nybegynder
20. juni 2003 - 21:54 #3
Min fejl... er vist lidt træt lige nu...
Avatar billede brian0905 Nybegynder
20. juni 2003 - 22:07 #4
hmmmm...øv troede lige du kunne "spotte fejlen" :-)
Af yderligere informationser kan jeg sige at jeg har taget eksemplet fra nettet : http://www.c-sharpcorner.com/Code/2002/Mar/DNetRemoringSimpleApP2.asp forskellen på hans eksempel og mit er at han har to .dll filer i debug direktory når han kører programmet, mens jeg kun har een og det er mit interace (et separat projekt). Jeg forstår ikke lige hvor han får den anden .dll fra...
Avatar billede nielslbeck Nybegynder
20. juni 2003 - 22:08 #5
Jeg kigger lige lidt på det... men som sagt er jeg lidt træt - det har været en hård uge :-)
Avatar billede nielslbeck Nybegynder
20. juni 2003 - 22:16 #6
Følgende linie i serveren skal laves om:

RemotingConfiguration.RegisterWellKnownServiceType(typeof(GeneralInformation), "CollaborationServer" , WellKnownObjectMode.Singleton);

Den skal i stedet være:

RemotingConfiguration.RegisterWellKnownServiceType(typeof(KLASSE), "CollaborationServer" , WellKnownObjectMode.Singleton);

Det skal altså ikke være typeof(interface) men typeof(klasse)... hvis du forstår...
Avatar billede nielslbeck Nybegynder
20. juni 2003 - 22:21 #7
Så det må være: typeof(Server)
Avatar billede brian0905 Nybegynder
20. juni 2003 - 22:29 #8
Hurraaaaaaa.... for fedt. Tusind tak for hjælpen det virker perfekt
Avatar billede nielslbeck Nybegynder
20. juni 2003 - 22:29 #9
:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester