Bir uzak sunucuda bir nesneye, Visual Basic 2005 veya Visual Basic .NET kullanarak başvuruya göre sıralama hakkında

Makale çevirileri Makale çevirileri
Makale numarası: 301112 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Bu makalenin Microsoft Visual C# .NET sürümü için bkz: 307600.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

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:
300951Visual Basic. NET'i kullanarak bir uzak sunucu oluşturma hakkında
300943Uzak 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.
  1. Visual Studio 2005 veya Visual Studio .NET'i başlatın.
  2. Yeni bir sınıf kitaplığı uygulama ve ServerClassRef olarak adlandırın.
  3. Dosya Class1.vb ServerClassRef.vb yeniden adlandırın.
  4. 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
    					
  5. 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
    					
  6. 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
    					
  7. Proje ServerClassRef.dll derleme oluşturun.
  8. 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.
  1. Visual Studio 2005 veya Visual Studio .NET'i başlatın.
  2. Basitlik'ın dosyasında için uzak sunucuyu başlatmak ve bunu ServerObjectRef adı için yeni bir konsol uygulaması oluşturun.
  3. Module1.vb ServerObjectRef.vb için varsayılan olarak oluşturulan dosyayı yeniden adlandırın.
  4. Başvuru System.Runtime.Remoting ad alanını projeye ekleyin.
  5. Önceki bölümde oluşturduğunuz ServerClassRef.dll derlemesine ekleyin.
  6. 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:
    Imports System.Runtime.Remoting
    Imports System.Runtime.Remoting.Channels
    Imports System.Runtime.Remoting.Channels.TCP
    					
  7. 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)
    					
  8. ServerClassRef nesne, uzak çerçevesiyle RemotingConfiguration nesnesinin RegisterWellKnownType yöntemini ça??rarak kaydedin. Şu parça belirtmeniz gerekir:
    1. 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.
    2. 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.
    3. 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:
      RemotingConfiguration.RegisterWellKnownServiceType( _
       Type.GetType("ServerClassRef.HelloServer, ServerClassRef"), _
       "RemoteTestRef", _
       WellKnownObjectMode.SingleCall)
      						
  9. Sunucu uygulaması <a0>Konsol</a0> nesnesinin ReadLine yöntemiyle çalışan tutmak:
    Console.WriteLine("Hit <enter> to exit...")
    Console.ReadLine()
    					
  10. Projenizi oluşturun.
  11. Kapatın ve projeyi kaydedin.

Bir uzak sunucuda bir istemciye nesneleri ileterek oluşturun.

  1. Visual Studio 2005 veya Visual Studio .NET'i başlatın.
  2. Yeni bir konsol uygulaması oluşturun ve bu ClientAppRef adlandırın.
  3. Module1.vb ClientAppRef.vb için varsayılan olarak oluşturulan dosyayı yeniden adlandırın.
  4. Başvuru System.Runtime.Remoting ad alanını projeye ekleyin.
  5. Bu belgede daha önce oluşturulan ServerClassRef.dll derlemesine ekleyin.
  6. 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:
    Imports System.Runtime.Remoting
    Imports System.Runtime.Remoting.Channels
    Imports System.Runtime.Remoting.Channels.TCP
    					
  7. 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()
    					
  8. Ş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:
    1. 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.
    2. 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
      						
  9. 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
    					
  10. Istemci uygulaması <a0>Konsol</a0> nesnesinin ReadLine yöntemiyle çalışan tutmak:
    Console.WriteLine("Hit <enter> to exit...")
    Console.ReadLine()
    					
  11. Projenizi oluşturun.
  12. Sunucu uygulaması çalıştığından emin olun.
  13. 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.

Referanslar

.NET remoting genel bakış (.NET Framework Geliştirici Kılavuzu)

TcpChannel sınıfı (.NET Framework sınıf kitaplığı)

.NET framework örnekleri - uzak
http://msdn.microsoft.com/en-us/library/kwdt6w2k(VS.80).aspx
Mıcrosoft .NET remoting: BIR teknik genel bakış
http://msdn2.microsoft.com/en-us/library/ms973857.aspx
Activator.GetObject yöntemi (.NET Framework sınıf kitaplığı)

Type.GetType yöntemi (.NET Framework sınıf kitaplığı)

RegisterWellKnownServiceType yöntemi (.NET Framework sınıf kitaplığı)

Özellikler

Makale numarası: 301112 - Last Review: 24 Şubat 2014 Pazartesi - Gözden geçirme: 5.6
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbnosurvey kbarchive kbmt kbvs2005applies kbvs2005swept kbhowtomaster KB301112 KbMttr
Machine-translated Article
Ö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.
Makalenin İngilizcesi aşağıdaki gibidir:301112

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com