Uzak sunucu oluşturmak için Visual C# kullanma

Bu makale, başka bir uygulamanın Visual C# kullanarak erişebileceği bir uzak sunucu oluşturmanıza yardımcı olur.

Orijinal ürün sürümü: Visual C#
Özgün KB numarası: 307445

Özet

Bu makalede, başka bir uygulamanın erişebileceği bir uzak sunucunun nasıl oluşturulacağı gösterilmektedir. Bu sunucuya erişen uygulama aynı bilgisayarda, farklı bir bilgisayarda veya farklı bir ağda bulunabilir. Uzak sunucu iki bölüme ayrılır: sunucu nesnesi ve sunucu uygulaması. Sunucu nesnesi, istemcinin iletişim kurduğunu nesnedir ve sunucu uygulaması sunucu nesnesini .NET Uzaktan İletişim çalışma zamanı çerçevesine kaydetmek için kullanılır.

Bu makale, aşağıdaki Microsoft .NET Framework Sınıf Kitaplığı ad alanlarını ifade eder:

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

Gereksinimler

Bu makalede, aşağıdaki konular hakkında bilgi sahibi olduğunuz varsayılır:

  • Visual Studio .NET veya Visual Studio
  • Visual C# .NET veya Visual C#

Uzak sunucu nesnesi oluşturma

Sunucu uygulamasını oluşturmanın ilk adımı bir sunucu nesnesi oluşturmaktır. sunucu nesnesi, istemci uygulamasının sunucu bilgisayarda örnek oluşturduğu ve iletişimde olduğu nesnedir. İstemci uygulaması bunu istemcide oluşturulan bir proxy nesnesi aracılığıyla yapar. Bu örnekte, sunucu nesnesi bir Sınıf Kitaplığı'nda (DLL) bulunur ve myRemoteClass olarak adlandırılır.

  1. Visual C# .NET'te yeni bir Sınıf Kitaplığı uygulaması oluşturun. Projeyi ServerClass olarak adlandırın. Sınıf1 varsayılan olarak oluşturulur.

  2. Çözüm Gezgini Class1.cs kod dosyasınıServerClass.cs olarak yeniden adlandırın.

  3. ServerClass.cs açın ve Class1'imyRemoteClass olarak yeniden adlandırın. Ayrıca sınıfın varsayılan oluşturucusunun sınıf adıyla eşleşmesi için öğesini olarak yeniden adlandırmanız gerekir. myRemoteClass sınıfından MarshalByRefObject devralınmalıdır. Sınıfınız şimdi aşağıdaki gibi görünmelidir:

    public class myRemoteClass: MarshalByRefObject
    {
        public myRemoteClass()
        {
          // TO DO: Add constructor logic here.
        }
    }
    
  4. myRemoteClass'a bir dize alan, konsola dize değeriyle bir ileti görüntüleyen ve dize boş değilse True döndüren bir genel yöntem ekleyin.

    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. ServerClass.dll derlemesini oluşturmak için projeyi oluşturun.

  6. Projeyi kaydedin ve kapatın.

Uzak sunucu uygulamasını oluşturma

İstemcinin iletişim kuracağı sunucu nesnesini oluşturduktan sonra, bu nesneyi Uzaktan İletişim çerçevesine kaydetmeniz gerekir. Nesnesini kaydettiğinizde, sunucuyu başlatmanız ve istemcilerin bu bağlantı noktasına bağlanması için sunucunun bir bağlantı noktasında dinlemesini de sağlayın. Bunu yapmak için yürütülebilir bir dosyanın çıkışını veren bir proje türüne ihtiyacınız vardır.

Sunucu nesnesini ayrı bir projeye eklemenin nedeni, istemci projesinden sunucu nesnesine kolayca başvurabilmenizdir. Bu projeye eklerseniz başvurular yalnızca DLL dosyaları olarak ayarlanabildiği için başvuru yapamazsınız.

  1. Uzak sunucuyu başlatmak için Visual C# .NET'te yeni bir Konsol Uygulaması oluşturun. Sınıf1 varsayılan olarak oluşturulur.

  2. Çözüm Gezgini Class1.cs dosyasını RemoteServer.cs olarak yeniden adlandırın.

  3. Ad alanına System.Runtime.Remoting bir başvuru ekleyin.

  4. Önceki bölümde oluşturduğunuz ServerClass.dll derlemesine bir başvuru ekleyin.

  5. using, ve Remoting.Channels.TCP ad alanları üzerindeki RemotingRemoting.Channelsdeyimini kullanarak kodunuzun ilerleyen bölümlerinde bu ad alanlarına bildirimleri nitelemeniz gerekmez. Diğer bildirimlerden önce deyimini using kullanmanız gerekir.

    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    
  6. Uygun değişkeni bildirin. bu örnekte 8085 numaralı bağlantı noktası olan belirli bir bağlantı noktasında istemcilerin bağlanmasını dinleyen bir nesne bildirin ve başlatın TcpChannel . RegisterChannel Kanalı kanal hizmetlerine kaydetmek için yöntemini kullanın. yordamına Class1aşağıdaki bildirim kodunu Main ekleyin:

    TcpChannel chan = new TcpChannel(8085);
    ChannelServices.RegisterChannel(chan);
    
  7. RegisterWellKnownType Nesnesini Remoting çerçevesine kaydetmek ServerClass için nesnesinin yöntemini RemotingConfiguration çağırın ve aşağıdaki parametreleri belirtin:

    • Kaydedilmekte olan nesnenin tam tür adı (bu örnekte ServerClass.myRemoteClass ) ve ardından ServerClass derleme adı. Burada hem ad alanının adını hem de sınıf adını belirtin. Önceki bölümde ad alanı belirtmediğiniz için varsayılan kök ad alanı kullanılır.

    • Nesnenin yayımlandığı uç noktayı RemoteTest olarak adlandırın. İstemcilerin nesneye bağlanmak için bu adı bilmesi gerekir.

    • Son parametreyi SingleCall belirtmek için nesne modunu kullanın. Nesne modu, sunucuda etkinleştirildiğinde nesnenin ömrünü belirtir. Nesneler söz konusu olduğunda SingleCall , aynı istemci aynı yöntemi birden çok kez çağırsa bile, bir istemcinin yaptığı her çağrı için sınıfının yeni bir örneği oluşturulur. Öte yandan, Singleton nesneler yalnızca bir kez oluşturulur ve tüm istemciler aynı nesneyle iletişim kurar.

      RemotingConfiguration.RegisterWellKnownServiceType(
      System.Type.GetType("ServerClass.myRemoteClass, ServerClass"),
      "RemoteTest",
      WellKnownObjectMode.SingleCall);
      
  8. ReadLine Sunucu uygulamasını çalışır durumda tutmak için nesnesinin yöntemini Console kullanın.

    System.Console.WriteLine("Hit <enter> to exit...");
    System.Console.ReadLine();
    
  9. Projenizi oluşturun.

  10. Projeyi kaydedin ve kapatın.

Başvurular

.NET Uzaktan İletişimi'ne genel bakış için .NET Framework Geliştirici Kılavuzu belgelerine bakın.