Làm th? nào đ? marshal tham kh?o m?t đ?i tư?ng vào m?t máy ch? t? xa b?ng cách s? d?ng Visual Basic 2005 ho?c Visual Basic.NET

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 301112 - Xem s?n ph?m mà bài này áp d?ng vào.
Bài vi?t này đ? đư?c lưu tr?. Bài vi?t đư?c cung c?p "nguyên tr?ng" và s? không c?n đư?c c?p nh?t n?a.
Đ?i v?i m?t Microsoft Visual C#.NET Phiên b?n c?a bài vi?t này, xem 307600.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài vi?t này ch?ng t? làm th? nào đ? marshal m?t đ?i tư?ng b?i tham chi?u đ?n m?t máy ch? t? xa. Khi b?n nguyên soái m?t đ?i tư?ng tham kh?o, th?i gian t?o ra m?t minh b?ch proxy đ? các máy ch? có th? th?c hi?n cu?c g?i Quay l?i các đ?i tư?ng trên máy khách. Đi?u duy nh?t mà s? đư?c g?i đ?n máy ch? là các proxy. Proxy marshals ?ng h? cu?c g?i cho khách hàng.

Bài vi?t này đư?c chia làm ba ph?n: đ?i tư?ng máy ch?, máy ch? ?ng d?ng và ?ng d?ng khách. Nó m? r?ng v? các bài vi?t cơ s? ki?n th?c Microsoft sau:
300951 Làm th? nào đ? t?o m?t máy ch? t? xa b?ng cách s? d?ng Visual Basic.NET
300943 Làm th? nào đ? t?o ra khách hàng truy c?p vào máy ch? t? xa b?ng cách s? d?ng Visual Basic.NET

Yêu c?u

Danh sách sau v?ch ra đư?c đ? ngh? ph?n c?ng, ph?n m?m, cơ s? h? t?ng m?ng và gói d?ch v? mà b?n c?n:
  • Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server, ho?c máy ch? Microsoft Windows NT 4.0
  • Microsoft Visual Studio 2005 ho?c Microsoft Visual Studio.NET
Bài vi?t này gi? đ?nh r?ng b?n đ? quen thu?c v?i các ch? đ? sau:
  • Visual Studio 2005 ho?c Visual Studio.NET
  • B?n m?ng

T?o m?t đ?i tư?ng t? xa máy ch? b?ng cách đi qua các đ?i tư?ng

Bư?c đ?u tiên đ? t?o ra ?ng d?ng máy ch? là t?o ra đ?i tư?ng máy ch? c?a b?n. Máy ch? là nh?ng g? các ?ng d?ng khách hàng instantiates và giao ti?p v?i trên máy tính. ?ng d?ng khách hàng th?c hi?n đi?u này thông qua m?t đ?i tư?ng proxy t?o ra trên máy khách. Đ?i tư?ng máy ch? c?a b?n s? n?m trong m?t l?p h?c thư vi?n (DLL) và đư?c g?i là HelloServer. Trong cùng m?t d? án, b?n c?ng s? xác đ?nh các l?p h?c s? đư?c thông qua t? khách hàng đ?n máy ch?. L?p này s? đư?c g?i là ForwardMe. B?i v? b?n mu?n các l?p h?c ForwardMe đ? đư?c marshaled tham kh?o, các l?p h?c ForwardMe ph?i th?a hư?ng t? MarshalByRefObject.
  1. B?t đ?u Visual Studio 2005 ho?c Visual Studio.NET.
  2. T?o m?t ?ng d?ng thư vi?n l?p và tên nó ServerClassRef.
  3. Đ?i tên các t?p tin Class1.vb như ServerClassRef.vb.
  4. M? ServerClassRef.vb và thêm hai l?p đư?c g?i là HelloServerForwardMe c? hai đ?u th?a hư?ng t? MarshalByRefObject. L?p HelloServer s? có các l?p h?c chính đư?c s? d?ng b?i ?ng d?ng khách. Các l?p h?c ForwardMe s? đư?c s? d?ng đ? g?i d? li?u đ?i tư?ng t? khách hàng đ?n máy ch?. ServerClassRef.vb t?p tin m? c?a b?n s? gi?ng như sau:
    Public Class HelloServer
    	Inherits MarshalByRefObject
    
    End Class
    Public Class ForwardMe
    	Inherits MarshalByRefObject
    
    End Class
    					
  5. Thêm m?t phương pháp công c?ng đ? HelloServer g?i là HelloMethod mà ph?i m?t m?t ForwardMe đ?i tư?ng. B?n s? s? d?ng phương pháp này đ? vư?t qua m?t ForwardMe đ?i tư?ng đ?n máy ch?. Phương pháp này s? g?i cho các CallMe phương th?c c?a đ?i tư?ng đó. L?p h?c HelloServer c?a b?n bây gi? nên h?nh như sau:
    Public Class HelloServer
        Inherits MarshalByRefObject
    
        Public Sub HelloMethod(ByRef obj As ForwardMe)
            Dim i As Integer
            obj.CallMe()
        End Sub
    End Class
    					
  6. Thêm m?t phương pháp công c?ng l?p ForwardMe. Phương pháp này s? có đư?c tên c?a quá tr?nh nơi m? này đang đư?c th?c thi. B?i v? b?n ch? c?n g?i khai ?y quy?n cho các máy ch? và làm cho callbacks cho khách hàng (nguyên soái tham kh?o), m? s? th?c hi?n trong quá tr?nh c?a khách hàng.
    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. Xây d?ng d? án đ? t?o ra các ServerClassRef.dll gan y Cynulliad.
  8. Đóng và lưu d? án.

T?o m?t ?ng d?ng máy ch? t? xa

Bây gi? mà b?n đ? t?o ra đ?i tư?ng h? ph?c v? khách hàng c?a b?n s? liên l?c v?i, b?n ph?i đăng k? đ?i tư?ng này v?i khuôn kh? Remoting. Đăng k? không ch? liên quan đ?n vi?c đăng k? đ?i tư?ng, nhưng c?ng bao g?m b?t đ?u máy ch? và có nó nghe trên m?t c?ng cho khách hàng đ? k?t n?i. Đ? th?c hi?n vi?c này, b?n c?n m?t lo?i d? án s? xu?t m?t t?p tin th?c thi. L? do mà b?n bao g?m các đ?i tư?ng máy ch? trong m?t d? án riêng bi?t là đ? cho b?n có th? d? dàng tham kh?o đ?i tư?ng h? ph?c v? t? khách hàng. N?u b?n có nó trong d? án này b?n có th? tham không kh?o nó b?i v? tài li?u tham kh?o ch? có th? đư?c thi?t l?p đ? t?p tin DLL.
  1. B?t đ?u Visual Studio 2005 ho?c Visual Studio.NET.
  2. V? l?i ích c?a s? đơn gi?n, t?o ra m?t ?ng d?ng giao di?n đi?u khi?n m?i đ? b?t đ?u máy ch? t? xa và tên nó ServerObjectRef.
  3. Đ?i tên t?p đư?c t?o ra theo m?c đ?nh t? Module1.vb t?i ServerObjectRef.vb.
  4. Thêm m?t tham chi?u đ?n System.Runtime.Remoting không gian tên cho d? án.
  5. Thêm m?t tham chi?u đ?n các ServerClassRef.dll l?p ráp mà b?n đ? t?o trong ph?n trư?c.
  6. S? d?ng các báo cáo hàng nh?p kh?u vào các Remoting, Remoting.channels, và Remoting.channels.TCP không gian tên do đó, b?n s? không đư?c yêu c?u đ? đ? đi?u ki?n khai báo trong nh?ng không gian tên sau trong m? c?a b?n. Các báo cáo hàng nh?p kh?u ph?i đư?c s? d?ng trư?c khi vào b?t c? t? khai khác:
    Imports System.Runtime.Remoting
    Imports System.Runtime.Remoting.Channels
    Imports System.Runtime.Remoting.Channels.TCP
    					
  7. Khai báo m?t bi?n kh?i t?o m?t TcpChannel đ?i tư?ng s? l?ng nghe cho khách hàng đ? k?t n?i vào m?t s? c?ng, trong trư?ng h?p này c?ng 8085. Đăng k? các kênh mà khách hàng s? s? d?ng đ? liên l?c v?i d?ch v? kênh b?ng cách s? d?ng các RegisterChannel phương pháp. Thêm m? tuyên b? trong các th? t?c chính trong Module1:
    Dim chan As TcpChannel = New TcpChannel(8085)
    ChannelServices.RegisterChannel(chan)
    					
  8. Đăng k? các ServerClassRef đ?i tư?ng v?i khuôn kh? Remoting b?ng cách g?i các RegisterWellKnownType phương pháp c?a các RemotingConfiguration đ?i tư?ng. B?n ph?i ch? đ?nh nh?ng ph?n sau đây:
    1. Tên đ?y đ? lo?i c?a đ?i tư?ng đang đư?c đăng k?, trong trư?ng h?p này ServerClassRef.HelloServer, theo sau là tên l?p ráp, ServerClassRef. B?n ph?i xác đ?nh c? hai tên c?a không gian tên c?ng như tên l?p. B?i v? b?n không nêu r? m?t không gian tên trong ph?n trư?c, không gian tên g?c m?c đ?nh đư?c s? d?ng.
    2. Ti?p theo, cung c?p tên c?a đi?m cu?i nơi mà các đ?i tư?ng s? đư?c công b?. Khách hàng c?n bi?t tên này đ? k?t n?i v?i đ?i tư?ng. S? d?ng RemoteTestRef.
    3. Các tham s? cu?i cùng ch? đ?nh ch? đ? đ?i tư?ng, có th? SingleCall ho?c Singleton. Ví d? này xác đ?nh SingleCall. Ch? đ? đ?i tư?ng xác đ?nh c? th?i gian c?a đ?i tư?ng khi nó đư?c kích ho?t trên h? ph?c v?. Trong trư?ng h?p c?a đ?i tư?ng SingleCall, m?t trư?ng h?p m?i c?a các l?p h?c s? đư?c t?o ra cho m?i cu?c g?i đư?c th?c hi?n t? m?t khách hàng, ngay c? khi các khách hàng cùng m?t cu?c g?i cùng m?t phương pháp nhi?u hơn m?t l?n. Singleton đ?i tư?ng, m?t khác, đư?c t?o ra ch? m?t l?n và t?t c? các khách hàng giao ti?p v?i các đ?i tư?ng tương t?:
      RemotingConfiguration.RegisterWellKnownServiceType( _
       Type.GetType("ServerClassRef.HelloServer, ServerClassRef"), _
       "RemoteTestRef", _
       WellKnownObjectMode.SingleCall)
      						
  9. Gi? cho các ?ng d?ng máy ch? ch?y b?ng cách s? d?ng các ReadLine phương pháp c?a các Giao di?n đi?u khi?n đ?i tư?ng:
    Console.WriteLine("Hit <enter> to exit...")
    Console.ReadLine()
    					
  10. Xây d?ng d? án c?a b?n.
  11. Đóng và lưu d? án.

T?o ra m?t khách hàng đ?n m?t máy ch? t? xa b?ng cách đi qua các đ?i tư?ng

  1. B?t đ?u Visual Studio 2005 ho?c Visual Studio.NET.
  2. T?o m?t ?ng d?ng giao di?n đi?u khi?n m?i và tên nó ClientAppRef.
  3. Đ?i tên t?p đư?c t?o ra theo m?c đ?nh t? Module1.vb t?i ClientAppRef.vb.
  4. Thêm m?t tham chi?u đ?n System.Runtime.Remoting không gian tên cho d? án.
  5. Thêm m?t tham chi?u đ?n các ServerClassRef.dll l?p ráp đ? đư?c t?o ra trư?c đó trong văn b?n này.
  6. S? d?ng các báo cáo hàng nh?p kh?u vào các Remoting, Remoting.channels, và Remoting.channels.TCP không gian tên do đó, b?n s? không đư?c yêu c?u đ? đ? đi?u ki?n khai báo trong nh?ng không gian tên sau trong m? c?a b?n. Các báo cáo hàng nh?p kh?u ph?i đư?c s? d?ng trư?c khi vào b?t c? t? khai khác:
    Imports System.Runtime.Remoting
    Imports System.Runtime.Remoting.Channels
    Imports System.Runtime.Remoting.Channels.TCP
    					
  7. Khai báo m?t bi?n kh?i t?o m?t TcpChannel đ?i tư?ng khách hàng s? s? d?ng đ? k?t n?i v?i các ?ng d?ng máy ch?. B?n ph?i ch? đ?nh c?ng khi kh?i t?o các TcpChannel đ?i tư?ng đ? cho phép giao ti?p hai chi?u. Đi?u này là c?n thi?t b?i v? b?n đang marshaling m?t đ?i tư?ng tham kh?o và các máy ch? s? c?n ph?i th?c hi?n callbacks cho khách hàng. Nó s? làm như v?y b?ng cách s? d?ng c?ng này. C?ng nên đư?c khác nhau hơn m?t trong đó s? đư?c s? d?ng đ? g?i d? li?u. Đăng k? các kênh v?i d?ch v? c?a kênh b?ng cách s? d?ng các RegisterChannel phương pháp. Th? hai, b?n ph?i kh?i t?o m?t m?i ForwardMe đ?i tư?ng s? đư?c thông qua vào h? ph?c v? t? xa. Thêm m? tuyên b? trong các th? t?c chính trong Module1:
    Dim chan As TcpChannel = New TcpChannel(8086)
    ChannelServices.RegisterChannel(chan)
    Dim objForwardMe As New ServerClassRef.ForwardMe()
    					
  8. Bây gi? b?n có th? tuyên b? và nhanh chóng máy ch? t? xa. Trong trư?ng h?p này, b?n s? nhanh chóng các HelloServer đ?i tư?ng b?ng cách s? d?ng các GetObject phương pháp c?a các Activator đ?i tư?ng. B?n ph?i ch? đ?nh nh?ng ph?n sau đây:
    1. Tên đ?y đ? lo?i c?a đ?i tư?ng đang đư?c đăng k?, trong trư?ng h?p này ServerClassRef.HelloServer, theo sau là tên Cynulliad ServerClassRef. B?n ph?i xác đ?nh c? hai cái tên c?a không gian tên ? đây classname. B?i v? b?n không nêu r? m?t không gian tên trong ph?n trư?c, không gian tên g?c m?c đ?nh đư?c s? d?ng.
    2. Tài nguyên th?ng nh?t danh (URI) c?a đ?i tư?ng mà b?n c?n ph?i kích ho?t. URI ph?i bao g?m các giao th?c (tcp), tên máy tính (localhost), c?ng (8085), và đi?m cu?i c?a đ?i tư?ng máy ch? (RemoteTestRef). S? d?ng URI "tcp: / / localhost:8085 / RemoteTestRef" đ? truy c?p vào máy ch? t? xa ServerClass.
      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. N?u đ?i tư?ng máy ch? đư?c instantiated thành công, b?n có th? g?i phương th?c c?a đ?i tư?ng máy ch?, đi qua trong m?i đư?c thành l?p objForwardMe đ?i tư?ng. S?a đ?i chu?i nên tr? v? k?t qu? là, do đó, b?n s? mu?n hi?n th? r?ng:
    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. Gi? cho ?ng d?ng khách ch?y b?ng cách s? d?ng các ReadLine phương pháp c?a các Giao di?n đi?u khi?n đ?i tư?ng:
    Console.WriteLine("Hit <enter> to exit...")
    Console.ReadLine()
    					
  11. Xây d?ng d? án c?a b?n.
  12. Đ?m b?o r?ng ?ng d?ng máy ch? đang ch?y.
  13. Ch?y các d? án và th? nghi?m các giao ti?p khách hàng/máy ch?. B?n s? th?y đ?u ra đư?c hi?n th? trong c?a s? giao di?n đi?u khi?n c?a khách hàng. B?n đang marshaling b?i tham chi?u, do đó, callbacks đư?c th?c hi?n cho khách hàng.

THAM KH?O

.T?ng quan v? Remoting R?NG (.NET Framework Developer Guide)

TcpChannel l?p (.NET Framework l?p thư vi?n)

.NET Framework m?u - Remoting
http://MSDN.Microsoft.com/en-US/Library/kwdt6w2k (VS.80) .aspx
Microsoft.NET Remoting: M?t k? thu?t t?ng quan
http://msdn2.Microsoft.com/en-US/Library/ms973857.aspx
Phương pháp Activator.GetObject (.NET Framework l?p thư vi?n)

Phương pháp type.GetType (.NET Framework l?p thư vi?n)

Phương pháp RegisterWellKnownServiceType (.NET Framework l?p thư vi?n)

Thu?c tính

ID c?a bài: 301112 - L?n xem xét sau cùng: 21 Tháng Hai 2014 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
T? khóa: 
kbnosurvey kbarchive kbvs2005applies kbvs2005swept kbhowtomaster kbmt KB301112 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này: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