Udostępnij za pośrednictwem


Tworzenie serwera zdalnego przy użyciu języka Visual C#

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.

  1. Utwórz nową aplikację biblioteki klas na platformie .NET języka Visual C#. Nadaj projektowi nazwę ServerClass. Klasa 1 jest tworzona domyślnie.

  2. W Eksplorator rozwiązań zmień nazwę pliku kodu Class1.cs na ServerClass.cs.

  3. 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.
        }
    }
    
  4. 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;
         }
    }
    
  5. Skompiluj projekt, aby utworzyć zestaw ServerClass.dll .

  6. 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.

  1. Utwórz nową aplikację konsolową w programie Visual C# .NET, aby uruchomić serwer zdalny. Klasa 1 jest tworzona domyślnie.

  2. W Eksplorator rozwiązań zmień nazwę pliku Class1.cs na RemoteServer.cs.

  3. Dodaj odwołanie do System.Runtime.Remoting przestrzeni nazw.

  4. Dodaj odwołanie do zestawu ServerClass.dll utworzonego w poprzedniej sekcji.

  5. Użyj instrukcji using w Remotingprzestrzeniach nazw , Remoting.Channelsi Remoting.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;
    
  6. 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 w Main procedurze :Class1

    TcpChannel chan = new TcpChannel(8085);
    ChannelServices.RegisterChannel(chan);
    
  7. Wywołaj metodę RegisterWellKnownType RemotingConfiguration obiektu, aby zarejestrować obiekt w ServerClass 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 przypadku SingleCall 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 strony Singleton 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);
      
  8. ReadLine Użyj metody Console obiektu , aby zachować działanie aplikacji serwera.

    System.Console.WriteLine("Hit <enter> to exit...");
    System.Console.ReadLine();
    
  9. Skompiluj projekt.

  10. Zapisz i zamknij projekt.

Informacje

Aby zapoznać się z omówieniem komunikacji wirtualnej platformy .NET, zobacz dokumentację podręcznika dewelopera programu .NET Framework.