Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.RemotingSystem.Runtime.Remoting.ChannelsSystem.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#
- 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ş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.
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'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
MarshalByRefObjectdevralmalı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 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.
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'da Class1.cs dosyasını RemoteServer.cs olarak yeniden adlandırın.
Ad alanına
System.Runtime.Remotingbir başvuru ekleyin.Önceki bölümde oluşturduğunuz ServerClass.dll derlemesine bir başvuru ekleyin.
Kodunuzun
usingRemotingilerleyen bölümlerinde bu ad alanları içindeki bildirimleri nitelemeniz gerekmeyecek şekilde ,Remoting.ChannelsveRemoting.Channels.TCPad alanları üzerindeki deyimini kullanın. Deyiminiusingdiğer bildirimlerden önce 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. Kanalı kanalRegisterChannelhizmetlerine kaydetmek için yöntemini kullanın. yordamınaClass1aşağıdaki bildirim kodunuMainekleyin:TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan);RegisterWellKnownTypeNesnesini Remoting çerçevesine kaydetmekServerClassiç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 RemoteTest olarak yayımlandığı uç noktayı adlandırın. İstemcilerin nesneye bağlanabilmesi için bu adı bilmesi gerekir.
Son parametreyi
SingleCallbelirtmek 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,Singletonnesneler 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);
ReadLineSunucu uygulamasını çalışır durumda tutmak için nesnesinin yönteminiConsolekullanın.System.Console.WriteLine("Hit <enter> to exit..."); System.Console.ReadLine();Projenizi derleyin.
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.