Delen via


Visual C# gebruiken om een externe server te maken

Dit artikel helpt u bij het maken van een externe server waar een andere toepassing toegang heeft met behulp van Visual C#.

Oorspronkelijke productversie: Visual C#
Oorspronkelijk KB-nummer: 307445

Samenvatting

In dit artikel wordt uitgelegd hoe u een externe server maakt waartoe een andere toepassing toegang heeft. De toepassing die toegang heeft tot deze server, kan zich op dezelfde computer, op een andere computer of op een ander netwerk bevinden. De externe server is onderverdeeld in twee delen: het serverobject en de servertoepassing. Het serverobject is het object waarmee de client communiceert en de servertoepassing wordt gebruikt om het serverobject te registreren bij het .NET Remoting runtime framework.

Dit artikel verwijst naar de volgende Microsoft .NET Framework Class Library-naamruimten:

  • System.Runtime.Remoting
  • System.Runtime.Remoting.Channels
  • System.Runtime.Remoting.Channels.Tcp

Behoeften

In dit artikel wordt ervan uitgegaan dat u bekend bent met de volgende onderwerpen:

  • Visual Studio .NET of Visual Studio
  • Visual C# .NET of Visual C#
  • Netwerken

Het externe serverobject maken

De eerste stap bij het maken van de servertoepassing is het maken van een serverobject. Het serverobject is waarmee de clienttoepassing instantiëren en communiceert op de servercomputer. De clienttoepassing doet dit via een proxyobject dat op de client is gemaakt. In dit voorbeeld bevindt het serverobject zich in een klassebibliotheek (DLL) en wordt myRemoteClass genoemd.

  1. Maak een nieuwe klassebibliotheektoepassing in Visual C# .NET. Geef de project ServerClass een naam. Klasse1 wordt standaard gemaakt.

  2. Wijzig in Solution Explorer de naam van het Class1.cs-codebestand in ServerClass.cs.

  3. Open ServerClass.cs en wijzig de naam van Class1 in myRemoteClass. U moet ook de naam van de standaardconstructor voor de klasse wijzigen zodat deze overeenkomt met de klassenaam. myRemoteClass moet overnemen van de MarshalByRefObject klasse. Uw klas moet nu als volgt worden weergegeven:

    public class myRemoteClass: MarshalByRefObject
    {
        public myRemoteClass()
        {
          // TO DO: Add constructor logic here.
        }
    }
    
  4. Voeg een openbare methode toe aan myRemoteClass die een tekenreeks gebruikt, geeft een bericht weer aan de console met een waarde van de tekenreeks en retourneert Waar als de tekenreeks niet leeg is.

    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. Bouw het project om de ServerClass.dll assembly te maken.

  6. Sla het project op en sluit het.

De externe servertoepassing maken

Nadat u het serverobject hebt gemaakt waarmee de client communiceert, moet u dit object registreren bij het externe framework. Wanneer u het object registreert, moet u ook de server starten en de server laten luisteren op een poort zodat clients verbinding kunnen maken met die poort. Hiervoor hebt u een projecttype nodig dat een uitvoerbaar bestand uitvoert.

De reden om het serverobject in een afzonderlijk project op te nemen, is dat u eenvoudig vanuit het clientproject naar het serverobject kunt verwijzen. Als u het in dit project opneemt, kunt u er niet naar verwijzen, omdat verwijzingen alleen kunnen worden ingesteld op DLL-bestanden.

  1. Maak een nieuwe consoletoepassing in Visual C# .NET om de externe server te starten. Klasse1 wordt standaard gemaakt.

  2. Wijzig in Solution Explorer de naam van het Class1.cs-bestand in RemoteServer.cs.

  3. Voeg een verwijzing naar de System.Runtime.Remoting naamruimte toe.

  4. Voeg een verwijzing toe naar de ServerClass.dll assembly die u in de vorige sectie hebt gemaakt.

  5. Gebruik de using instructie voor de Remoting, Remoting.Channelsen Remoting.Channels.TCP naamruimten, zodat u niet in aanmerking hoeft te komen voor declaraties in deze naamruimten verderop in uw code. U moet de using instructie vóór eventuele andere declaraties gebruiken.

    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    
  6. Declareer de juiste variabele. Declareer en initialiseer een TcpChannel object dat luistert naar clients om verbinding te maken op een bepaalde poort. Dit is poort 8085 in dit voorbeeld. Gebruik de RegisterChannel methode om het kanaal te registreren bij de kanaalservices. Voeg de volgende declaratiecode toe in de Main procedure van Class1:

    TcpChannel chan = new TcpChannel(8085);
    ChannelServices.RegisterChannel(chan);
    
  7. Roep de RegisterWellKnownType methode van het RemotingConfiguration object aan om het ServerClass object te registreren bij het externe framework en geef de volgende parameters op:

    • De volledige typenaam van het object dat wordt geregistreerd (dit is ServerClass.myRemoteClass in dit voorbeeld), gevolgd door de assemblynaam ServerClass. Geef hier zowel de naam van de naamruimte als de klassenaam op. Omdat u in de vorige sectie geen naamruimte hebt opgegeven, wordt de standaardhoofdnaamruimte gebruikt.

    • Geef het eindpunt een naam waar het object moet worden gepubliceerd als RemoteTest. Clients moeten deze naam kennen om verbinding te kunnen maken met het object.

    • Gebruik de SingleCall objectmodus om de laatste parameter op te geven. De objectmodus geeft de levensduur van het object aan wanneer het wordt geactiveerd op de server. In het geval van SingleCall objecten wordt een nieuw exemplaar van de klasse gemaakt voor elke aanroep die een client doet, zelfs als dezelfde client dezelfde methode meer dan één keer aanroept. Aan de andere kant Singleton worden objecten slechts eenmaal gemaakt en communiceren alle clients met hetzelfde object.

      RemotingConfiguration.RegisterWellKnownServiceType(
      System.Type.GetType("ServerClass.myRemoteClass, ServerClass"),
      "RemoteTest",
      WellKnownObjectMode.SingleCall);
      
  8. Gebruik de ReadLine methode van het Console object om de servertoepassing actief te houden.

    System.Console.WriteLine("Hit <enter> to exit...");
    System.Console.ReadLine();
    
  9. Bouw uw project.

  10. Sla het project op en sluit het.

Verwijzingen

Zie de handleiding voor ontwikkelaars van .NET Framework voor ontwikkelaars voor een overzicht van .NET Remoting.