Aracılığıyla paylaş


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

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

Özgün ü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 kuracakları 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 konulara aşina 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şim kurarak oluşturduğ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'i myRemoteClass olarak yeniden adlandırın. Sınıf adıyla eşleşmesi için sınıfın varsayılan oluşturucusunun adını da yeniden adlandırmanız gerekir. myRemoteClass sınıfından MarshalByRefObject devralmalı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 da başlatmanız ve istemcilerin bu bağlantı noktasına bağlanması için sunucunun bir bağlantı noktasında dinlemesini 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'da 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. Kodunuzun using Remotingilerleyen bölümlerinde bu ad alanları içindeki bildirimleri nitelemeniz gerekmeyecek şekilde , Remoting.Channelsve Remoting.Channels.TCP ad alanları üzerindeki deyimini kullanın. Deyimini using diğer bildirimlerden önce 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 . Kanalı kanal RegisterChannel 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 RemoteTest olarak yayımlandığı uç noktayı adlandırın. İstemcilerin nesneye bağlanabilmesi 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 derleyin.

  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.