Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł ułatwia utworzenie serwera zdalnego, na którym inna aplikacja może uzyskiwać dostęp przy użyciu języka Visual C#.
Oryginalna wersja produktu: Visual C#
Oryginalny numer KB: 307445
Podsumowanie
W tym artykule pokazano, jak utworzyć serwer zdalny, do którego może uzyskać dostęp inna aplikacja. Aplikacja, która uzyskuje dostęp do tego serwera, może znajdować się na tym samym komputerze, na innym komputerze lub w innej sieci. Serwer zdalny jest podzielony na dwie części: obiekt serwera i aplikację serwera. Obiekt serwera jest obiektem, z który klient komunikuje się, a aplikacja serwera służy do rejestrowania obiektu serwera za pomocą platformy uruchomieniowej .NET Remoting.
W tym artykule opisano następujące przestrzenie nazw biblioteki klas programu Microsoft .NET Framework:
System.Runtime.Remoting
System.Runtime.Remoting.Channels
System.Runtime.Remoting.Channels.Tcp
Wymagania
W tym artykule założono, że znasz następujące tematy:
- Visual Studio .NET lub Visual Studio
- Visual C# .NET lub Visual C#
- Sieci
Tworzenie obiektu serwera zdalnego
Pierwszym krokiem tworzenia aplikacji serwera jest utworzenie obiektu serwera. Obiekt serwera jest tym, z czym aplikacja kliencka tworzy wystąpienie i komunikuje się z nim na komputerze serwera. Aplikacja kliencka wykonuje to za pośrednictwem obiektu proxy utworzonego na kliencie. W tym przykładzie obiekt serwera znajduje się w bibliotece klas (DLL) i nosi nazwę myRemoteClass.
Utwórz nową aplikację biblioteki klas na platformie .NET języka Visual C#. Nadaj projektowi nazwę ServerClass. Klasa 1 jest tworzona domyślnie.
W Eksplorator rozwiązań zmień nazwę pliku kodu Class1.cs na ServerClass.cs.
Otwórz ServerClass.cs i zmień nazwę klasy Class1 na myRemoteClass. Należy również zmienić nazwę domyślnego konstruktora klasy na tak, aby była zgodna z nazwą klasy. myRemoteClass powinna dziedziczyć z
MarshalByRefObject
klasy . Klasa powinna teraz wyglądać następująco:public class myRemoteClass: MarshalByRefObject { public myRemoteClass() { // TO DO: Add constructor logic here. } }
Dodaj metodę publiczną do klasy myRemoteClass , która przyjmuje ciąg, wyświetla komunikat do konsoli z wartością ciągu i zwraca wartość True , jeśli ciąg nie jest pusty.
public bool SetString(String sTemp) { try { Console.WriteLine("This string '{0}' has a length of {1}", sTemp, sTemp.Length); return sTemp != ""; } catch { return false; } }
Skompiluj projekt, aby utworzyć zestaw ServerClass.dll .
Zapisz i zamknij projekt.
Tworzenie aplikacji serwera zdalnego
Po utworzeniu obiektu serwera, z którym klient będzie się komunikował, należy zarejestrować ten obiekt w strukturze komunikacji wirtualnej. Podczas rejestrowania obiektu należy również uruchomić serwer i mieć serwer nasłuchiwania na porcie, aby klienci mogli nawiązać połączenie z tym portem. W tym celu potrzebny jest typ projektu, który generuje plik wykonywalny.
Przyczyną uwzględnienia obiektu serwera w osobnym projekcie jest możliwość łatwego odwoływanie się do obiektu serwera z projektu klienta. Jeśli dołączysz go do tego projektu, nie możesz się do niego odwołać, ponieważ odwołania można ustawić tylko na pliki DLL.
Utwórz nową aplikację konsolową w programie Visual C# .NET, aby uruchomić serwer zdalny. Klasa 1 jest tworzona domyślnie.
W Eksplorator rozwiązań zmień nazwę pliku Class1.cs na RemoteServer.cs.
Dodaj odwołanie do
System.Runtime.Remoting
przestrzeni nazw.Dodaj odwołanie do zestawu ServerClass.dll utworzonego w poprzedniej sekcji.
Użyj instrukcji
using
wRemoting
przestrzeniach nazw ,Remoting.Channels
iRemoting.Channels.TCP
, aby nie być wymagane do kwalifikowania deklaracji w tych przestrzeniach nazw w dalszej części kodu. Przed wszelkimi innymi deklaracjami należy użyćusing
instrukcji .using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp;
Zadeklaruj odpowiednią zmienną. Zadeklaruj i zainicjuj
TcpChannel
obiekt, który nasłuchuje, aby klienci nawiązywali połączenie na określonym porcie, który jest portem 8085 w tym przykładzie.RegisterChannel
Użyj metody , aby zarejestrować kanał w usługach kanału. Dodaj następujący kod deklaracji wMain
procedurze :Class1
TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan);
Wywołaj metodę
RegisterWellKnownType
RemotingConfiguration
obiektu, aby zarejestrować obiekt wServerClass
strukturze komunikacji telefonicznej i określ następujące parametry:Pełna nazwa typu obiektu, który jest zarejestrowany (czyli ServerClass.myRemoteClass w tym przykładzie), a następnie nazwa zestawu ServerClass. Określ w tym miejscu zarówno nazwę przestrzeni nazw, jak i nazwę klasy. Ponieważ w poprzedniej sekcji nie określono przestrzeni nazw, używana jest domyślna główna przestrzeń nazw.
Nazwij punkt końcowy, w którym obiekt ma zostać opublikowany jako RemoteTest. Klienci muszą znać tę nazwę, aby nawiązać połączenie z obiektem.
SingleCall
Użyj trybu obiektu, aby określić końcowy parametr. Tryb obiektu określa okres istnienia obiektu po aktywowaniu go na serwerze. W przypadkuSingleCall
obiektów tworzone jest nowe wystąpienie klasy dla każdego wywołania, które wykonuje klient, nawet jeśli ten sam klient wywołuje tę samą metodę więcej niż raz. Z drugiej stronySingleton
obiekty są tworzone tylko raz, a wszyscy klienci komunikują się z tym samym obiektem.RemotingConfiguration.RegisterWellKnownServiceType( System.Type.GetType("ServerClass.myRemoteClass, ServerClass"), "RemoteTest", WellKnownObjectMode.SingleCall);
ReadLine
Użyj metodyConsole
obiektu , aby zachować działanie aplikacji serwera.System.Console.WriteLine("Hit <enter> to exit..."); System.Console.ReadLine();
Skompiluj projekt.
Zapisz i zamknij projekt.
Informacje
Aby zapoznać się z omówieniem komunikacji wirtualnej platformy .NET, zobacz dokumentację podręcznika dewelopera programu .NET Framework.