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#
- Ağ
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.
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.
Çözüm Gezgini Class1.cs kod dosyasınıServerClass.cs olarak yeniden adlandırın.
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. } }
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; } }
ServerClass.dll derlemesini oluşturmak için projeyi oluşturun.
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.
Uzak sunucuyu başlatmak için Visual C# .NET'te yeni bir Konsol Uygulaması oluşturun. Sınıf1 varsayılan olarak oluşturulur.
Çözüm Gezgini Class1.cs dosyasını RemoteServer.cs olarak yeniden adlandırın.
Ad alanına
System.Runtime.Remoting
bir başvuru ekleyin.Önceki bölümde oluşturduğunuz ServerClass.dll derlemesine bir başvuru ekleyin.
using
, veRemoting.Channels.TCP
ad alanları üzerindekiRemoting
Remoting.Channels
deyimini kullanarak kodunuzun ilerleyen bölümlerinde bu ad alanlarına bildirimleri nitelemeniz gerekmez. Diğer bildirimlerden önce deyiminiusing
kullanmanız gerekir.using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp;
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ınaClass1
aşağıdaki bildirim kodunuMain
ekleyin:TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan);
RegisterWellKnownType
Nesnesini Remoting çerçevesine kaydetmekServerClass
için nesnesinin yönteminiRemotingConfiguration
ç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ğundaSingleCall
, 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);
ReadLine
Sunucu uygulamasını çalışır durumda tutmak için nesnesinin yönteminiConsole
kullanın.System.Console.WriteLine("Hit <enter> to exit..."); System.Console.ReadLine();
Projenizi oluşturun.
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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin