2010-12-26 6 views
0
public static void StartService() 
    { 
     Hashtable t = new Hashtable(); 
     t["port"] = portnumber; 
     t["name"] = "somechannel"; 

     channel= new TcpChannel(t, null, null); 

     ChannelServices.RegisterChannel(channel, false); 
     RemotingConfiguration.RegisterWellKnownServiceType(typeof(someRemoteObject), "somedomain", WellKnownObjectMode.SingleCall); 
    } 

    public static void StopService() 
    { 
     //what should I do ?? 
    } 

buttonStart_Click: ruft StartService()
buttonStop_Click: ruft StopService()Stopp .NET Remoting

Es ist offensichtlich, dass buttonStart zweimal machen „Nur eine Verwendung einzeln Socketadresse (Protokoll/Netzwerkadresse/Port) klicken normalerweise erlaubt ist "Ausnahme.

Die Frage ist, wie auf entfernte Anrufe zu reagieren, ohne die Anwendung zu beenden.

+3

Das sieht aus wie Sie neuen Code schreiben. Wenn das der Fall ist, sollten Sie Remoting lieber ablegen und sich in WCF vertiefen. –

+0

In welcher Funktionalität starten und stoppen Sie das Remoting und starten es neu? Warum nicht die Verbindung für die Lebensdauer der Anwendung herstellen und nur eine Verbindung verwenden? –

+0

.Net-Remoting ist eine einfache Möglichkeit, Services kommunizieren zu lassen, und es hängt davon ab, was er erreichen möchte, wenn WCF wirklich eine bessere Lösung für sein Problem ist. – tobsen

Antwort

2

Wie wäre es, wenn Sie beim ersten Aufruf von buttonStart_Click einfach ein Flag setzen, und wenn das Flag gesetzt ist, überspringen Sie das Remoting-Zeug?

+0

Zusätzlich zu John Saunders Antwort können Sie versuchen, herauszufinden, ob der Kanal bereits registriert wurde. http://msdn.microsoft.com/en-us/library/system.runtime.remoting.channels.channelservices.getchannel(v=VS.90).aspx – tobsen

1

Versuchen

ChannelServices.UnregisterChannel(channel);