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

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
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.
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 MarshalByRefObjectEnd ClassPublic Class ForwardMe	Inherits MarshalByRefObjectEnd 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 SubEnd 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 FunctionEnd 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.RemotingImports System.Runtime.Remoting.ChannelsImports 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.RemotingImports System.Runtime.Remoting.ChannelsImports 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.HelloServerobjHelloServer = 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 stepEnd 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.HelloServerobjHelloServer = 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 - RemotingMicrosoft.NET Remoting: Một kỹ thuật tổng quanPhươ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 Bài viết: 301112 - Xem lại Lần cuối: 02/21/2014 00:43:12 - Bản sửa đổi: 2.0

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbvs2005applies kbvs2005swept kbhowtomaster kbmt KB301112 KbMtvi
Phản hồi