Laden...

[gelöst] IPC: Zugriff verweigert beim client

Letzter Beitrag vor 16 Jahren 5 Posts 7.274 Views
[gelöst] IPC: Zugriff verweigert beim client

Hi,

habe gerade angefangen mich in Remoting einzuarbeiten. Nun dachte ich ein einfaches Beispiel wäre ein Dienst, der Statusinfos an einen Client sendet.

Ich dachte ich regel dass ganz über Remoting mit IPC.

Problem dabei ist, der Client kann sich das erstmal zum Server verbinden, bei zweiten mal, bekomme ich folgende Exception: Fehler beim Erstellen eines IPC-Ports: Zugriff verweigert.

Hier mal mein Server (Wie ich den IPC Server starte und stoppe)


            
        private IpcChannel myChan;
        private ServerObject sm;
// Server erzeugen und starten
            BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
            serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;

            BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();

            System.Collections.Hashtable properties = new System.Collections.Hashtable();
            properties["portName"] = "chatexample";
            properties["exclusiveAddressUse"] = false;

            myChan = new IpcChannel(properties, clientProv, serverProv);

            rtbLog.Text += "IPCChannel wird registriert...\r\n";
            ChannelServices.RegisterChannel(myChan,true);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(ServerObject),"chat.rem",WellKnownObjectMode.Singleton);

            sm = (ServerObject)Activator.GetObject(typeof(ServerObject), "ipc://chatexample/chat.rem");
//Server stoppen
            ChannelServices.UnregisterChannel(myChan);
            myChan = null;
            sm = null;


Hier mal mein Client (Wie ich den IPC Client starte und stoppe)



        private IServer remServer;
        private IChannel myChannel;
        private ClientObject myClient;
//Starten
            myChannel = new IpcChannel("MessageClient");

            ChannelServices.RegisterChannel(myChannel,true);
            myClient = new ClientObject(this);

            remServer =
                (IServer)
                Activator.GetObject(typeof (IServer),
                                    "ipc://chatexample/chat.rem");
                remServer._login(myClient);
//Stoppen
            remServer._logout(myClient);
            ChannelServices.UnregisterChannel(myChannel);
            myChannel = null;
            remServer = null;

Hier mal das Interface


    public interface IServer
    {
        void _login (IClient client);
        void _logout (IClient client);
        bool _sendText (string text);
    }

    public interface IClient
    {
        void _setText (string text); 
    }

Problem ist wie gesagt, das sich der Client kein zweites mal zum Server verbinden kann, da ich die Exception bekomme.

Woran könnte das den liegen?

Falls ihr noch mehr Informationen braucht, einfach bescheid sagen...

Danke und beste Grüße

Tobias

*Edit:


            myChannel = null;
            remServer = null;

eingefügt, hat aber auch nicht geholfen 🙁

Hallo B A L U,

hatte das selbe Problem.

Achte darauf, dass wenn du den Client schließt, ein ChannelServices.UnregisterChannel ausführst.

//Edit: Habe gerade gesehen, dass du das tust.

Soweit ich weiß, besteht das Problem bei mir weiterhin. Deshalb prüfe ich immer beim RegisterClient, ob dieser schon in Gebrauch ist.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

mhm,

ja das wäre ein Idee.

hab grade nochmal nen Stunde gegoggelt und der gleichen, aber ich finde einfach keine Lösung.

Vielleicht kann ja doch noch jemand helfen 8)

Schönes Wochenende

Tobias

Kanal-Regisitrierung

Hallo B A L U,

Du drafst den Kanal am Client nur einmal registrieren. Idealerweise tust Du das in der main-Methode der Client Anwendung. Ist der Kanal registriert, kannst Du jederzeit Proxy-Objekte zur Kommunikation dem Server mittels Activator erzeugen.

Ich vermute, dass Du beim zweiten Verbindungsversuch auch wieder den Kanal registrieren willst. Da bereits ein Kanal mit diesem Namen registriert ist, bekommst Du eine Ausnahme.

Ha, genau das wars 🙂

Vielen Dank

Tobias