.NET Remoting: различия между версиями
[непроверенная версия] | [непроверенная версия] |
BPK (обсуждение | вклад) Нет описания правки |
Fuxx (обсуждение | вклад) м lang= в cite web |
||
(не показано 50 промежуточных версий 36 участников) | |||
Строка 1: | Строка 1: | ||
{{Значения|.NET}} |
|||
'''.NET Remoting''' |
'''.NET Remoting''' — компонент, созданный компанией [[Microsoft]]. [[Интерфейс программирования приложений|API]] для [[Межпроцессное взаимодействие|межпроцессного взаимодействия]]. Реализация от Microsoft протокола [[SOAP]] ([[Веб-служба|веб-сервисы]]). Выпущен в [[2002 год]]у вместе с версией 1.0 пакета [[.NET Framework]]. Это одна из серии технологий от Microsoft, начатой в [[1990 год]]у первой версией [[Object Linking and Embedding|OLE]] для 16-разрядной [[Microsoft Windows|Windows]]. Промежуточными шагами в разработке подобных технологий были [[Component Object Model|COM]], выпущенная в [[1993 год]]у и доработанная в [[1995 год]]у под названием COM-95, [[Distributed Component Object Model|DCOM]], выпущенная в [[1997 год]]у (и переименованная в ActiveX), и COM+ с её [[Microsoft Transaction Server]] (MTS), выпущенная в [[2000 год]]у<ref>{{cite web|title=Component Object Model and Related Capabilities |author=Cornella-Dorda, Santiago |publisher=Carnegie-Mellon Software Engineering Institute |date=2001-03-13 |url=http://www.sei.cmu.edu/str/descriptions/com_body.html|lang=en|archiveurl=https://web.archive.org/web/20080515233825/http://www.sei.cmu.edu/str/descriptions/com_body.html |archivedate=2008-05-15 }}</ref>. В данный момент на смену .NET Remoting пришёл [[Windows Communication Foundation|WCF]], являющийся частью [[.NET Framework 3.0]]. |
||
Так же, как и все члены данного семейства и подобные технологии, например [[Common Object Request Broker Architecture|CORBA]] и [[RMI]], .NET Remoting |
Так же, как и все члены данного семейства и подобные технологии, например [[Common Object Request Broker Architecture|CORBA]] и [[RMI]], функция .NET Remoting заключается в следующем: при поддержке со стороны инфраструктуры .NET Remoting, клиентский процесс отправляет сообщение серверному процессу и получает ответ<ref>{{книга |заглавие=Microsoft .NET Remoting |год=2002 |издательство={{Нп3|Microsoft Press}} |язык=en |автор=Scott McLean, James Naftel and Kim Williams}}</ref><ref>{{книга |заглавие=Advanced .NET Remoting |издательство=[[Apress]] |год=2005 |язык=en |автор=Ingo Rammer and Mario Szpuszta}}</ref>. |
||
== Краткий обзор == |
== Краткий обзор == |
||
.NET Remoting позволяет приложению создать [[Объект (программирование)|объект]] (именуемый ''remotable object'') доступный в рамках ''remoting boundaries'' и |
.NET Remoting позволяет приложению создать [[Объект (программирование)|объект]], (именуемый ''remotable object'') доступный в рамках ''remoting boundaries'' и расположенный в [[Домен приложения|домене приложения]] внутри одного процесса, в другом [[Процесс (информатика)|процессе]], исполняющемся на этом компьютере или даже на другом компьютере, соединённом сетью<ref name="overview"/>. Процесс .NET Remoting содержит приёмник запросов к объекту в [[Домен приложения|домене]] серверного приложения. На стороне клиента любые запросы к удалённому объекту направляются средой выполнения .NET Remoting через объекты <code>Channel</code>, являющиеся обёрткой для средств транспортного уровня, таких как потоки [[Transmission Control Protocol|TCP]], потоки [[HTTP]] и [[Именованный канал|именованные каналы]]. В результате запросы к удаленным объектам для клиентского кода ничем не отличаются от локальных вызовов, а созданием экземпляра нужного <code>Channel</code>-объекта приложение .NET Remoting можно без перекомпиляции перевести на другой коммуникационный протокол. [[Среда выполнения]] сама по себе выполняет этапы [[Сериализация|сериализации]] и [[маршалинг]]а объектов в среде между клиентским и серверным доменами приложения<ref name="overview">{{cite web|url=http://msdn2.microsoft.com/en-us/library/kwdt6w2k(VS.71).aspx |title=.NET Remoting Overview|lang=en|accessdate=2007-10-23 |archiveurl=https://web.archive.org/web/20070630112426/http://msdn2.microsoft.com:80/en-us/library/kwdt6w2k(vs.71).aspx|archivedate=2007-06-30}}</ref>. |
||
.NET Remoting делает ссылку на удалённый (remotable) объект доступной клиентскому приложению, которое затем направляет запросы к экземпляру удалённого объекта так, как если бы это был локальный объект<ref name="overview"/>. Однако, фактическое исполнение кода происходит на серверной стороне. Удалённый объект имеет идентификаторы в форме ''[[Uniform Resource Locator|URL]] активации''. В зависимости от конфигурации серверного процесса экземпляр удаленного объекта создаётся при подключении по данным URL<ref name="arch"/> в момент создания ссылки на удалённый объект или в момент первого обращения к удалённому объекту. Прослушивающий приёмник (listener) для объекта создаётся исполняющей средой .NET Remoting в момент, когда сервер регистрирует канал, который будет использоваться для подключения к удалённому объекту. На клиентской стороне инфраструктура .NET Remoting создаёт объект-заместитель (<code>proxy</code>), который является псевдоэкземпляром замещаемого объекта. Он не реализует функциональность удалённого объекта, но предоставляет похожий интерфейс, перенаправляя все запросы серверному объекту и возвращая результаты от него клиенту . Как следствие, инфраструктуре .NET Remoting для создания заместителя нужно обладать метаданными, описывающими публичный интерфейс удалённого объекта. Это можно обеспечить статическим связыванием со сборкой, содержащей [[метаданные]], во время компиляции или динамическим получением метаданных в виде [[WSDL]] или проприетарного формата, разработанного фирмой Microsoft. |
|||
.NET Remoting makes a reference of a remotable object available to a client application, which then instantiates and uses a remotable object as if it were a local object.<ref name="overview"/> However, the actual code execution happens at the server-side. A remotable object is identified by ''Activation [[Uniform Resource Locator|URLs]]'' and are instantiated by a connection to the URL.<ref name="arch"/> A listener for the object is created by the remoting runtime when the server registers the channel that is used to connect to the remotable object. At the client side, the remoting infrastructure creates a <code>proxy</code> that stands-in as a pseudo-instantiation of the remotable object. It does not implement the functionality of the remotable object, but presents a similar interface. As such, the remoting infrastructure needs to know the public interface of the remotable object before-hand. Any method calls made against the object, including the identity of the method and any parameters passed, are [[Сериализация|serialized]] to a byte stream and transferred over a communication protocol-dependent <code>Channel</code> to a recipient proxy object at the server side(«[[Маршалинг|marshalled]]»), by writing to the Channel’s transport sink.<ref name="arch"/> At the server side, the proxy reads the stream off the sink and makes the call to the remotable object on the behalf of the client. The results are serialized and transferred over the sink to the client, where the proxy reads the result and hands it over to the calling application.<ref name="arch"/> If the remotable object needs to make a callback to a client object for some services, the client application must mark it as remotable and have a remoting runtime host a listener for it.<ref name="arch"/> The server can connect to it over a different Channel, or over the already existent one if the underlying connection supports bidirectional communication.<ref name="arch"/> A channel can be composed of a number of different Channel objects, possibly with different heterogeneous transports. Thus, remoting can also work across systems separated by an interconnection of heterogeneous networks, including the internet.<ref name="arch">{{cite web | url = http://msdn2.microsoft.com/en-us/library/2e7z38xb(VS.71).aspx | title = .NET Remoting Architecture | accessdate = 2007-10-23}}</ref> [[Безопасность типов|Type safety]] is enforced by the [[Система общих типов|CTS]] and the .NET Remoting runtime. Remote method calls are inherently synchronous; asynchronous calls can be implemented using threading libraries. Authentication and access control can be implemented for clients by either using custom Channels or by hosting the remotable objects in [[Internet Information Services|IIS]] and then using the IIS authentication system.<ref>{{cite web | url = http://msdn2.microsoft.com/en-us/library/aa720577(VS.71).aspx | title = Security | publisher = [[MSDN]] | accessdate = 2007-10-23}}</ref> |
|||
В процессе выполнения запросов любые вызовы методов, направленные объекту, включая [[идентификатор]] метода и любые передаваемые параметры, [[Сериализация|сериализуются]] в байтовый поток и передаются посредством канала связи, реализованного для конкретного протокола, принимающему прокси-объекту на серверной стороне («[[Маршалинг|маршализируются]]»). Передача происходит путём записи данных в транспортный ввод канала<ref name="arch"/>. На серверной стороне прокси читает [[поток данных]] из вывода канала и выполняет вызов удалённого компонента от лица клиента. Результаты сериализуются и передаются через канал клиенту, где прокси читает результат и передаёт его вызывающему приложению<ref name="arch"/>. |
|||
Если удалённому объекту нужно обеспечить обратный вызов (callback) клиентскому объекту, клиентский объект обратного вызова должен быть помечен как remotable, а инфраструктура .NET Remoting должна быть сконфигурирована на создание прослушивателя для него<ref name="arch"/>. Сервер может подключиться к нему по другому каналу или по уже существующему, если соединение, на котором он основан, поддерживает двунаправленный обмен данными<ref name="arch"/>. Канал может быть составлен из нескольких канальных объектов, возможно, даже с разными транспортными механизмами. Таким образом, система, основанная на .NET Remoting, может состоять из нескольких подсистем, связанных подключёнными друг к другу гетерогенными сетями, включая [[Интернет]]<ref name="arch">.{{cite web |url=http://msdn2.microsoft.com/en-us/library/2e7z38xb(VS.71).aspx |title=.NET Remoting Architecture|lang=en|accessdate=2007-10-23 |archiveurl=https://web.archive.org/web/20070608234032/http://msdn2.microsoft.com/en-us/library/2e7z38xb(VS.71).aspx|archivedate=2007-06-08 }}</ref> |
|||
Один из взаимодействующих [[Процесс (информатика)|процессов]] создаёт [[Объект (программирование)|объект]], предоставляющий доступный извне [[интерфейс]] (набор [[Метод (языки программирования)|методов]]). Другой процесс, имея информацию об [[URL|адресе расположения]] и типе доступного интерфейса, созданного первым процессом, может вызывать методы созданного первым процессом объекта. Вызов методов может осуществляться различными способами, например, посылкой запроса по протоколу [[HTTP]] и получения ответа. |
|||
== Примечания == |
== Примечания == |
||
{{примечания}} |
|||
<references/> |
|||
{{DotNET}} |
{{DotNET}} |
||
⚫ | |||
{{compu-soft-stub}} |
|||
[[Категория:Брокер объектных запросов]] |
|||
{{rq|sources}} |
|||
⚫ | |||
[[de:.NET Remoting]] |
|||
[[en:.NET Remoting]] |
|||
[[es:.NET Remoting]] |
|||
[[fr:.NET Remoting]] |
|||
[[ja:.NET Remoting]] |
|||
[[pt:.NET Remoting]] |
|||
[[uk:.NET Remoting]] |
|||
[[zh:.NET Remoting]] |
Текущая версия от 11:35, 3 апреля 2022
.NET Remoting — компонент, созданный компанией Microsoft. API для межпроцессного взаимодействия. Реализация от Microsoft протокола SOAP (веб-сервисы). Выпущен в 2002 году вместе с версией 1.0 пакета .NET Framework. Это одна из серии технологий от Microsoft, начатой в 1990 году первой версией OLE для 16-разрядной Windows. Промежуточными шагами в разработке подобных технологий были COM, выпущенная в 1993 году и доработанная в 1995 году под названием COM-95, DCOM, выпущенная в 1997 году (и переименованная в ActiveX), и COM+ с её Microsoft Transaction Server (MTS), выпущенная в 2000 году[1]. В данный момент на смену .NET Remoting пришёл WCF, являющийся частью .NET Framework 3.0.
Так же, как и все члены данного семейства и подобные технологии, например CORBA и RMI, функция .NET Remoting заключается в следующем: при поддержке со стороны инфраструктуры .NET Remoting, клиентский процесс отправляет сообщение серверному процессу и получает ответ[2][3].
Краткий обзор
[править | править код].NET Remoting позволяет приложению создать объект, (именуемый remotable object) доступный в рамках remoting boundaries и расположенный в домене приложения внутри одного процесса, в другом процессе, исполняющемся на этом компьютере или даже на другом компьютере, соединённом сетью[4]. Процесс .NET Remoting содержит приёмник запросов к объекту в домене серверного приложения. На стороне клиента любые запросы к удалённому объекту направляются средой выполнения .NET Remoting через объекты Channel
, являющиеся обёрткой для средств транспортного уровня, таких как потоки TCP, потоки HTTP и именованные каналы. В результате запросы к удаленным объектам для клиентского кода ничем не отличаются от локальных вызовов, а созданием экземпляра нужного Channel
-объекта приложение .NET Remoting можно без перекомпиляции перевести на другой коммуникационный протокол. Среда выполнения сама по себе выполняет этапы сериализации и маршалинга объектов в среде между клиентским и серверным доменами приложения[4].
.NET Remoting делает ссылку на удалённый (remotable) объект доступной клиентскому приложению, которое затем направляет запросы к экземпляру удалённого объекта так, как если бы это был локальный объект[4]. Однако, фактическое исполнение кода происходит на серверной стороне. Удалённый объект имеет идентификаторы в форме URL активации. В зависимости от конфигурации серверного процесса экземпляр удаленного объекта создаётся при подключении по данным URL[5] в момент создания ссылки на удалённый объект или в момент первого обращения к удалённому объекту. Прослушивающий приёмник (listener) для объекта создаётся исполняющей средой .NET Remoting в момент, когда сервер регистрирует канал, который будет использоваться для подключения к удалённому объекту. На клиентской стороне инфраструктура .NET Remoting создаёт объект-заместитель (proxy
), который является псевдоэкземпляром замещаемого объекта. Он не реализует функциональность удалённого объекта, но предоставляет похожий интерфейс, перенаправляя все запросы серверному объекту и возвращая результаты от него клиенту . Как следствие, инфраструктуре .NET Remoting для создания заместителя нужно обладать метаданными, описывающими публичный интерфейс удалённого объекта. Это можно обеспечить статическим связыванием со сборкой, содержащей метаданные, во время компиляции или динамическим получением метаданных в виде WSDL или проприетарного формата, разработанного фирмой Microsoft.
В процессе выполнения запросов любые вызовы методов, направленные объекту, включая идентификатор метода и любые передаваемые параметры, сериализуются в байтовый поток и передаются посредством канала связи, реализованного для конкретного протокола, принимающему прокси-объекту на серверной стороне («маршализируются»). Передача происходит путём записи данных в транспортный ввод канала[5]. На серверной стороне прокси читает поток данных из вывода канала и выполняет вызов удалённого компонента от лица клиента. Результаты сериализуются и передаются через канал клиенту, где прокси читает результат и передаёт его вызывающему приложению[5].
Если удалённому объекту нужно обеспечить обратный вызов (callback) клиентскому объекту, клиентский объект обратного вызова должен быть помечен как remotable, а инфраструктура .NET Remoting должна быть сконфигурирована на создание прослушивателя для него[5]. Сервер может подключиться к нему по другому каналу или по уже существующему, если соединение, на котором он основан, поддерживает двунаправленный обмен данными[5]. Канал может быть составлен из нескольких канальных объектов, возможно, даже с разными транспортными механизмами. Таким образом, система, основанная на .NET Remoting, может состоять из нескольких подсистем, связанных подключёнными друг к другу гетерогенными сетями, включая Интернет[5]
Примечания
[править | править код]- ↑ Cornella-Dorda, Santiago. Component Object Model and Related Capabilities (англ.). Carnegie-Mellon Software Engineering Institute (13 марта 2001). Архивировано 15 мая 2008 года.
- ↑ Scott McLean, James Naftel and Kim Williams. Microsoft .NET Remoting (англ.). — Microsoft Press[англ.], 2002.
- ↑ Ingo Rammer and Mario Szpuszta. Advanced .NET Remoting (англ.). — Apress, 2005.
- ↑ 1 2 3 .NET Remoting Overview (англ.). Дата обращения: 23 октября 2007. Архивировано 30 июня 2007 года.
- ↑ 1 2 3 4 5 6 ..NET Remoting Architecture (англ.). Дата обращения: 23 октября 2007. Архивировано 8 июня 2007 года.