Способ маршалирования объекта на удаленном сервере по ссылке с помощью Visual Basic 2005 или Visual Basic .NET

Переводы статьи Переводы статьи
Код статьи: 301112 - Vizualiza?i produsele pentru care se aplic? acest articol.
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Версия данной статьи для Microsoft Visual C# .NET:307600.
Развернуть все | Свернуть все

В этой статье

Аннотация

В этой статье показано, как маршалинг объекта по ссылке на удаленном сервере. Если маршалинг объекта по ссылке, среда выполнения создает прозрачный прокси, таким образом, чтобы сервер можно сделать вызовы в объект на стороне клиента. Единственное, что отправляется на сервер — это прокси-сервера. Прокси-сервер выполняет маршалинг вызовов обратной стороны на стороне клиента.

В данной статье разбивается на три части: объект сервера, приложения-сервера и клиентского приложения. Он расширяет параметры в следующих статьях базы знаний Майкрософт:
300951Как создать на удаленном сервере с помощью Visual Basic .NET
300943Создание клиентского доступа к удаленному серверу с помощью Visual Basic .NET

Требования

В приведенном ниже списке перечислены требования к оборудованию, сети, программному обеспечению и пакетам обновления.:
  • Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server или Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio 2005 или Microsoft Visual Studio .NET
При написании статьи предполагалось, что пользователь обладает достаточными знаниями в указанных ниже областях.:
  • В Visual Studio 2005 или Visual Studio .NET
  • Основные сети

Создание объекта удаленного сервера, передача объектов

Чтобы создать объект-сервер является первым шагом при создании серверного приложения. Объект-сервер является то, что клиентское приложение создает и взаимодействует с компьютера сервера. Клиентское приложение не через прокси-объект, созданный на стороне клиента. Объект-сервер будет находиться в библиотеке классов (DLL), а также называетсяHelloServer. В одном проекте можно также определить класс, который должен быть передан от клиента к серверу. Этот класс будет вызываться.ForwardMe. Поскольку класс ForwardMe маршалинг по ссылке, ForwardMe класс должен наследоваться изMarshalByRefObject.
  1. Запустите Visual Studio 2005 или Visual Studio .NET..
  2. Создайте новое приложение библиотеки классов и назовите ееServerClassRef.
  3. Переименуйте файл Class1.vb какServerClassRef.vb.
  4. Откройте ServerClassRef.vb и добавьте два класса с именемHelloServerиForwardMeОба наследовать отMarshalByRefObject. Класс HelloServer будет основной класс, используемый клиентским приложением. Класс ForwardMe будет использоваться для отправки объекта данных от клиента на сервер. Файл кода ServerClassRef.vb должен выглядеть следующим образом:
    Public Class HelloServer
    	Inherits MarshalByRefObject
    
    End Class
    Public Class ForwardMe
    	Inherits MarshalByRefObject
    
    End Class
    					
  5. Добавьте открытый метод, чтобы HelloServer вызоваHelloMethodкоторый принимаетForwardMeОбъект. Этот метод будет использовать для передачиForwardMeобъект сервера. Этот метод можно вызватьCallMeметод этого объекта. Класс HelloServer должен выглядеть следующим образом:
    Public Class HelloServer
        Inherits MarshalByRefObject
    
        Public Sub HelloMethod(ByRef obj As ForwardMe)
            Dim i As Integer
            obj.CallMe()
        End Sub
    End Class
    					
  6. Добавьте открытый метод к классу ForwardMe. Этот метод получит имя процесса, в котором выполняется этот код. Поскольку только отправка заглушки прокси-сервера на сервер и внесения обратные вызовы клиента (с упаковкой по ссылке), код будет выполняться в процессе клиента.
    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. Построение проекта, чтобы создатьServerClassRef.dllсборка.
  8. Закройте и сохраните проект.

Создание приложения удаленного сервера

Now that you have created the server object that your client will communicate with, you must register this object with the Remoting framework. Registering not only involves registering the object but also includes starting the server and having it listen on a port for clients to connect. To do this, you need a project type that will output an executable file. The reason that you included the server object in a separate project was so that you could easily reference the server object from the client. If you included it in this project you could not reference it because references can only be set to DLL files.
  1. Start Visual Studio 2005 or Visual Studio .NET.
  2. For simplicity's sake, create a new console application to start the remote server and name itServerObjectRef.
  3. Rename the file created by default from Module1.vb toServerObjectRef.vb.
  4. Add a reference toSystem.Runtime.Remotingnamespace to the project.
  5. Добавьте ссылку наServerClassRef.dllassembly that you created in the previous section.
  6. Use the Imports statement on theRemoting,Remoting.Channels, иRemoting.Channels.TCPnamespaces so you will not be required to qualify declarations in those namespaces later in your code. The Imports statement must be used prior to any other declarations:
    Imports System.Runtime.Remoting
    Imports System.Runtime.Remoting.Channels
    Imports System.Runtime.Remoting.Channels.TCP
    					
  7. Declare a variable to initialize aTcpChannelobject that will listen for clients to connect on a certain port, in this case port 8085. Register the channel that the client will use to communicate with the channel services by using theRegisterChannelметод. Add the declaration code in the Main procedure in Module1:
    Dim chan As TcpChannel = New TcpChannel(8085)
    ChannelServices.RegisterChannel(chan)
    					
  8. Register theServerClassRefobject with the Remoting framework by calling theRegisterWellKnownTypeметодRemotingConfigurationОбъект. You must specify the following pieces:
    1. The full type name of the object being registered, in this caseServerClassRef.HelloServer, followed by the assembly name,ServerClassRef. You must specify both the name of the namespace as well as the class name. Because you did not specify a namespace in the previous section, the default root namespace is used.
    2. Next, provide the name of the endpoint where the object will be published. Clients need to know this name in order to connect to the object. ИспользуйтеRemoteTestRef.
    3. The final parameter specifies the object mode, which can beSingleCall-или-Singleton. This example specifiesSingleCall. The object mode specifies the lifetime of the object when it is activated on the server. In the case of SingleCall objects, a new instance of the class will be created for each call that is made from a client, even if the same client calls the same method more than once. Singleton objects, on the other hand, are created once only and all clients communicate with the same object:
      RemotingConfiguration.RegisterWellKnownServiceType( _
       Type.GetType("ServerClassRef.HelloServer, ServerClassRef"), _
       "RemoteTestRef", _
       WellKnownObjectMode.SingleCall)
      						
  9. Keep the server application running by using theReadLineметодКонсольОбъект:
    Console.WriteLine("Hit <enter> to exit...")
    Console.ReadLine()
    					
  10. Build your project.
  11. Close and save the project.

Create a client to a remote server by passing objects

  1. Start Visual Studio 2005 or Visual Studio .NET.
  2. Create a new console application and name itClientAppRef.
  3. Rename the file created by default from Module1.vb toClientAppRef.vb.
  4. Add a reference toSystem.Runtime.Remotingnamespace to the project.
  5. Добавьте ссылку наServerClassRef.dllassembly that was created previously in this document.
  6. Use the Imports statement on theRemoting,Remoting.Channels, иRemoting.Channels.TCPnamespaces so you will not be required to qualify declarations in those namespaces later in your code. The Imports statement must be used prior to any other declarations:
    Imports System.Runtime.Remoting
    Imports System.Runtime.Remoting.Channels
    Imports System.Runtime.Remoting.Channels.TCP
    					
  7. Declare a variable to initialize aTcpChannelobject that the client will use to connect to the server application. You must specify the port when initializing theTcpChannelobject to enable bidirectional communication. This is necessary because you are marshaling an object by reference and the server will need to make callbacks to the client. It will do so by using this port. The port should be different than the one that will be used to send data. Register the channel with the channel services by using theRegisterChannelметод. Secondly, you must initialize a newForwardMeobject that will be passed to the remote server. Add the declaration code in the Main procedure in Module1:
    Dim chan As TcpChannel = New TcpChannel(8086)
    ChannelServices.RegisterChannel(chan)
    Dim objForwardMe As New ServerClassRef.ForwardMe()
    					
  8. Now you can declare and instantiate the remote server. In this case, you will instantiate theHelloServerobject by using theФункция GetObjectметодActivatorОбъект. Необходимо указать следующие элементы:
    1. Полное имя типа объекта, регистрации, в этом случаеServerClassRef.HelloServer, за которым следует имя сборкиServerClassRef. Необходимо указать имя пространства имен, а также classname здесь. Так как в предыдущем разделе пространства имен не указано, используется корневое пространство имен по умолчанию.
    2. Универсальный идентификатор ресурса (URI) объекта, который нужно активировать. URI должен включать протокол (tcp), имя компьютера (localhost), порт (8085) и конечной точкой (RemoteTestRef) объекта сервера. Используйте URI "tcp: / / localhost:8085 / RemoteTestRef» для доступа к удаленному серверу 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. Серверный объект создается успешно, можно вызвать метод объекта-сервера, передав в только что созданныйobjForwardMeОбъект. Так, что требуется для отображения, измененной строки должны возвращать в результате:
    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. Сохранить с помощью клиентского приложенияReadLineметодКонсольОбъект:
    Console.WriteLine("Hit <enter> to exit...")
    Console.ReadLine()
    					
  11. Постройте проект.
  12. Убедитесь, что работает приложение-сервер.
  13. Запустите проект и проверки связи клиент сервер. Вы увидите результат отображается в окне консоли клиента. Маршалинг по ссылке и таким образом, обратные вызовы выполняются на стороне клиента.

Ссылки

Общие сведения об удаленном взаимодействии .NET (руководства разработчика .NET Framework)

Класса TcpChannel (библиотеке классов .NET Framework)

Примеры .NET framework - удаленного доступа
.aspx HTTP://MSDN.Microsoft.com/en-us/library/kwdt6w2k (VS.80)
Удаленное взаимодействие Microsoft .NET: Технический обзор
http://msdn2.Microsoft.com/en-us/library/ms973857.aspx
Метод Activator.GetObject (библиотеке классов .NET Framework)

Метод Type.GetType (библиотеке классов .NET Framework)

Метод RegisterWellKnownServiceType (библиотеке классов .NET Framework)

Свойства

Код статьи: 301112 - Последний отзыв: 21 февраля 2014 г. - Revision: 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 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: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