Bu makalede, bir nesne başvurusu için bir uzak sunucu tarafından sıralamakta gösterilmiştir. Başvuruyla bir nesnesi çağrılamadı, böylece sunucu nesnesine geri istemcide çağrılarınızı çal??ma zaman? saydam proxy oluşturur. Proxy sunucuya gönderilen tek şey var. Proxy, istemciye çağrı arka s?ralar.
Bu makalede, üç bölüme ayrılır: sunucu nesnesini ve sunucu uygulaması istemci uygulamasını. Bu aşağıdaki Microsoft Knowledge Base makalelerinde genişletir:
Uzak sunucu istemci erişimi, Visual Basic. NET'i kullanarak oluşturma
Gereksinimler
Aşağıdaki listede, gereksinim duyacağınız donanım, yazılım, ağ altyapısı ve hizmet paketleri önerilmektedir:
Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server, veya Microsoft Windows NT 4.0 Server
Microsoft Visual Studio 2005 veya Microsoft Visual Studio .NET
Bu makalede, aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:
Visual Studio 2005 veya Visual Studio. NET'i
Temel ağ bağlantısı
Nesneleri ileterek, bir uzak sunucu nesnesi oluşturma
Sunucu uygulaması oluşturmanın ilk adımı, sunucu nesnesi oluşturmaktır. Sunucu ne istemci uygulamasının bir örneğini başlatır ve sunucu bilgisayarda iletişim kurar nesnedir. Istemci uygulaması ile istemci üzerinde oluşturulan bir proxy nesnesi yapar. Sunucu nesnenize sınıf kitaplığı (DLL) yer alacağı ve HelloServer olarak adlandırılır. Aynı projede, istemciden sunucuya geçirilmesini sınıfı tanımlayacaktır. Bu sınıf ForwardMe ça?r?l?r. Başvuruyla konmasını ForwardMe sınıfı istediğiniz çünkü ForwardMe sınıfı MarshalByRefObject devralınmalıdır.
Visual Studio 2005 veya Visual Studio .NET'i başlatın.
Yeni bir sınıf kitaplığı uygulama ve ServerClassRef olarak adlandırın.
Dosya Class1.vb ServerClassRef.vb yeniden adlandırın.
ServerClassRef.vb açın ve HelloServer ve her ikisini birden MarshalByRefObject devralmak ForwardMe adlı iki sınıf ekleme. HelloServer sınıfın ana sınıfı bir istemci uygulama tarafından kullanılan olacaktır. ForwardMe sınıfı, nesne verisi, istemciden sunucuya göndermek için kullanılır. Dosyanızı ServerClassRef.vb kodu aşağıdaki gibi görünmelidir:
Public Class HelloServer
Inherits MarshalByRefObject
End Class
Public Class ForwardMe
Inherits MarshalByRefObject
End Class
Genel bir yöntem için bir ForwardMe nesnesi götüren HelloMethod adlı HelloServer ekleyin. Bu yöntem, sunucuya bir ForwardMe nesnesi geçirmek için kullanır. Bu yöntemi, nesne CallMe yöntemini çağırır. HelloServer sınıfınızın şimdi aşağıdaki gibi görünmelidir:
Public Class HelloServer
Inherits MarshalByRefObject
Public Sub HelloMethod(ByRef obj As ForwardMe)
Dim i As Integer
obj.CallMe()
End Sub
End Class
Bir ortak yöntem ForwardMe sınıfına ekleyin. Bu yöntem, bu kod yürütülmekte olan işlem adını alır. Çünkü bir proxy stub yalnızca sunucuya gönderdiğinizi ve istemci (başvuruya göre sıralama) geri aramalar yapma, istemcinin işleminde kodu yürütülür.
Public Class ForwardMe
Inherits MarshalByRefObject
Public Function CallMe() As Object
Console.WriteLine("CallMe was executed in: " & _
Process.GetCurrentProcess.ProcessName.ToString)
End Function
End Class
Proje ServerClassRef.dll derleme oluşturun.
Kapatın ve projeyi kaydedin.
Bir uzak sunucu uygulaması oluştur
Artık istemciniz iletişim kuracağı sunucu nesnesini oluşturdunuz, bu nesne Remoting çerçevesiyle kaydettirmeniz gerekir. Kaydediliyor yalnızca nesnenin kaydediliyor içerir ancak Ayrıca, sunucuda başlayan ve bu istemciler için bir bağlantı noktasını dinlemesi içerir. Bunu yapmak için <a0></a0>, yürütülebilir bir dosya çıkış bir proje türü gerekir. Böylece istemciden gelen sunucu nesnesinin kolayca ba?vurabilirsiniz sunucu nesnesi ayrı bir projede yer neden oldu. Bu projede dahil, çünkü bu başvuru yalnızca DLL dosyaları için ayarlanabilir, bunu ba?vurabilirsiniz değil.
Visual Studio 2005 veya Visual Studio .NET'i başlatın.
Basitlik'ın dosyasında için uzak sunucuyu başlatmak ve bunu ServerObjectRef adı için yeni bir konsol uygulaması oluşturun.
Module1.vb ServerObjectRef.vb için varsayılan olarak oluşturulan dosyayı yeniden adlandırın.
Başvuru System.Runtime.Remoting ad alanını projeye ekleyin.
Önceki bölümde oluşturduğunuz ServerClassRef.dll derlemesine ekleyin.
Bu nedenle, bu ad daha sonra kodunuzda bildirimlerinde nitelemek için istenmeyecek ımports</a0> deyimini Uzak ve Remoting.ChannelsRemoting.Channels.TCP ad kullanın. ımports</a0> deyimini, tüm diğer bildirimlerden önce kullanılmalıdır:
Bir değişken, istemcilerinin bir belirli bağlantı noktasında, bu durumda, bağlantı noktası 8085 bağlanmak için dinleyecek bir TcpChannel nesnesi başlatılamıyor bildirin. Istemci RegisterChannel yöntemini kullanarak kanalı hizmetlerle iletişim kurmak için kullanacağınız kanal kaydedin. Module1 ana yordamda bildirim kodu ekleyin:
Dim chan As TcpChannel = New TcpChannel(8085)
ChannelServices.RegisterChannel(chan)
ServerClassRef nesne, uzak çerçevesiyle RemotingConfiguration nesnesinin RegisterWellKnownType yöntemini ça??rarak kaydedin. Şu parça belirtmeniz gerekir:
Kaydedilmekte nesnenin tam tür adı, bu durumda, derleme adı, ServerClassRefServerClassRef.HelloServer, sonra. Her iki ad alanının ad yan? s?ra sınıf adı belirtmeniz gerekir. Varsayılan kök ad boşluğu, önceki bölümde bir ad belirtmek için kullanılır.
Sonra nesnenin yayımlanmasına son noktanın adı, sağlar. Istemciler, nesneye bağlanmak için bu adını bilmeniz gerekir. RemoteTestRef kullanın.
Son parametre SingleCall ya da Singleton nesne modunu belirtir. Bu örnek, SingleCall belirtir. Nesne modu, sunucu üzerinde etkinleştirildiğinde nesnesinin yaşam süresini belirtir. Bile, aynı istemciden aynı yöntemi birden çok kez çağırır SingleCall nesnelerin bir istemciden yapılan her arama için yeni bir sınıf örneği oluşturulur. Aynı cinsten tek adet nesneleri, diğer yandan, yalnızca bir kez oluşturulur ve tüm istemciler aynı nesne ile iletişim kurma:
Sunucu uygulaması <a0>Konsol</a0> nesnesinin ReadLine yöntemiyle çalışan tutmak:
Console.WriteLine("Hit <enter> to exit...")
Console.ReadLine()
Projenizi oluşturun.
Kapatın ve projeyi kaydedin.
Bir uzak sunucuda bir istemciye nesneleri ileterek oluşturun.
Visual Studio 2005 veya Visual Studio .NET'i başlatın.
Yeni bir konsol uygulaması oluşturun ve bu ClientAppRef adlandırın.
Module1.vb ClientAppRef.vb için varsayılan olarak oluşturulan dosyayı yeniden adlandırın.
Başvuru System.Runtime.Remoting ad alanını projeye ekleyin.
Bu belgede daha önce oluşturulan ServerClassRef.dll derlemesine ekleyin.
Bu nedenle, bu ad daha sonra kodunuzda bildirimlerinde nitelemek için istenmeyecek ımports</a0> deyimini Uzak ve Remoting.ChannelsRemoting.Channels.TCP ad kullanın. ımports</a0> deyimini, tüm diğer bildirimlerden önce kullanılmalıdır:
Istemci, sunucu uygulamasına bağlanmak için kullanacağı bir TcpChannel nesneyi başlatmak için bir değişken bildirin. Çift yönlü iletişimi etkinleştirmek için TcpChannel nesne başlatırken, bağlantı noktası belirtmelisiniz. Nesneyi başvuruya göre sıralama ve sunucu, istemciye geri aramalar yapmak gerekir çünkü bu işlem gereklidir. Bu bağlantı noktasını kullanarak bunu yerine getirecektir. Bağlantı noktası veri göndermek için kullanılacak olandan farklı olmalıdır. Kanal, Kanal Hizmetleri ile RegisterChannel yöntemini kullanarak kaydedin. Ikinci olarak, uzak sunucuya geçirilen yeni ForwardMe nesnesi başlatmalısınız. Module1 ana yordamda bildirim kodu ekleyin:
Dim chan As TcpChannel = New TcpChannel(8086)
ChannelServices.RegisterChannel(chan)
Dim objForwardMe As New ServerClassRef.ForwardMe()
Şimdi bildirmek ve uzak sunucunun başlatılamadı. Bu durumda, Activator nesnesi GetObject yöntemi kullanarak HelloServer nesnesi örneğini. Şu parça belirtmeniz gerekir:
Kaydedilmekte nesnenin tam tür adı, bu durumda, derleme adı ServerClassRefServerClassRef.HelloServer, sonra. Her iki adı classname burada yanı sıra ad belirtmeniz gerekir. Varsayılan kök ad boşluğu, önceki bölümde bir ad belirtmek için kullanılır.
Etkinleştirmek için gereken nesnenin Tekdüzen Kaynak Tanımlayıcısı (URI). URI iletişim kuralı (tcp), <a2>bilgisayar adı (localhost)</a2>, <a4>bağlantı noktası bulunmalıdır (8085) ve son noktana sunucu nesnesinin (RemoteTestRef). URı'ı kullanın "tcp: / / localhost:8085 / RemoteTestRef" ServerClass uzak sunucuya erişmek için.
Dim objHelloServer As ServerClassRef.HelloServer
objHelloServer = CType(Activator.GetObject( _
Type.GetType("ServerClassRef.HelloServer, ServerClassRef"), _
"tcp://localhost:8085/RemoteTestRef"), _
ServerClassRef.HelloServer)
If objHelloServer Is Nothing Then
Console.WriteLine("Could not locate server")
Else
'See next step
End If
Sunucu nesnesi başarıyla örneği, yeni oluşturulan objForwardMe nesnesinde geçirmeden sunucu nesnesinin yöntemini çağırabilirsiniz. Değiştirilmiş dize; Bu nedenle, görüntülemek istediğiniz sonuç olarak dönmelidir:
Dim objHelloServer As ServerClassRef.HelloServer
objHelloServer = CType(Activator.GetObject( _
Type.GetType("ServerClassRef.HelloServer, ServerClassRef"), _
"tcp://localhost:8085/RemoteTestRef"), _
ServerClassRef.HelloServer)
If objHelloServer Is Nothing Then
Console.WriteLine("Could not locate server")
Else
objHelloServer.HelloMethod(objForwardMe)
End If
Istemci uygulaması <a0>Konsol</a0> nesnesinin ReadLine yöntemiyle çalışan tutmak:
Console.WriteLine("Hit <enter> to exit...")
Console.ReadLine()
Projenizi oluşturun.
Sunucu uygulaması çalıştığından emin olun.
Projeyi çalıştırın ve istemci-sunucu iletişimi sınayın. Istemcinin konsol penceresinde görüntülenen bir çıktı görmelisiniz. Bu nedenle, istemciye geri aramaları yapılan başvuruyla, sıralama.
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.