EP1164482A2 - System and method for interactive communication between objects in a distributed computing environment - Google Patents
System and method for interactive communication between objects in a distributed computing environment Download PDFInfo
- Publication number
- EP1164482A2 EP1164482A2 EP01109770A EP01109770A EP1164482A2 EP 1164482 A2 EP1164482 A2 EP 1164482A2 EP 01109770 A EP01109770 A EP 01109770A EP 01109770 A EP01109770 A EP 01109770A EP 1164482 A2 EP1164482 A2 EP 1164482A2
- Authority
- EP
- European Patent Office
- Prior art keywords
- computer
- remote
- client
- embedded
- instance
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/465—Distributed object oriented systems
Definitions
- the present invention relates to communication between object-oriented applications. More particularly, the present invention relates to a system and method for interactive communication between a host object-oriented component on a host computer and a remote object-oriented component running on a remote computer in a distributed computing environment.
- Object-oriented programming has been developed to facilitate creation of new, reusable components as well as to make convenient and flexible upgrades to existing applications.
- Object-oriented software provides data abstraction, which hides the implementation details within objects, and thus lessens the impact of changes when modifications are made to the software.
- Object-oriented programming also provides data encapsulation and data type inheritance. Data encapsulation relates to coupling data to the functions that operate on the data. Inheritance refers to the ability to define a data type as an extension of other data types. An instance of a data type that couples data and functions is referred to as an object.
- the Component Object Model developed by Microsoft Corporation of Redmond, Washington, is an object-oriented programming model that provides a standard as to how objects within a single application or between applications (e.g. client/server applications) interact and communicate.
- COM defines a set of standard interfaces, which are groupings of semantically related functions through which a client application accesses the services of, for example, a server application.
- OLE Object Linking and Embedding
- OLE Version 2 and ACTIVEX® controls network activation controls
- ACTIVEX® controls are based in part on OLE technologies, which enable object data to be embedded within an object, or linked to it, so that only a reference to the object data is stored in the object.
- One aspect of the OLE object system enables a client object-oriented application to have a reference to an object in an object application that does not share computer process memory (e.g., it operates in a different execution context) with the client application.
- both the client and server application exist within the same operating system process and, therefore, are able to share process memory.
- two additional interface objects e.g., a proxy-stub pair
- the proxy object which looks and acts just like the real object, intercepts and forwards all calls to the real object through the channel to the stub object.
- the stub object calls the real object.
- the communication between the proxy and stub is managed by a channel object, which sends information between the client and server processes.
- a standard interface, such as IDispatch may be employed to facilitate remote automation across a network.
- DCOM Distributed Component Object Model
- CORBA Common Object Request Broker Architecture
- the present invention relates to a system and method for enabling interactive communication between a host object-oriented component running on client computer and a remote object-oriented component running on a remote computer in a distributed computing environment.
- the host object-oriented component has an object therein.
- An application or another object associated with the object, however, is not resident on the client computer.
- a remote instance of the object is created at the remote computer in the form of the remote object-oriented component.
- An interface also is dynamically created between the remote object-oriented component and the client computer to facilitate communication of both programmatic data and user interface data. As a result, the remote object may be manipulated as if it were local on the client computer.
- the host object-oriented component may be a MICROSOFT® word processing document running on the client computer, which has an object in the form of a VISEO® document embedded therein, although no corresponding VISEO® application is resident on the client computer.
- a remote computer does have a VISEO® application.
- the embedded VISEO® document is invoked from within the word processing document running on the client computer, a remote instance of the embedded VISEO® document is created and associated with the VISEO® application running on the remote computer.
- An interface is dynamically created to facilitate communication of both programmatic data and user interface between the host-word processing document and the remote instance of the VISEO® document. The interface permits a user to manipulate the remote instance of the VISEO® document and view changes as if it were running locally on the client computer.
- a client is connected to a session of a remote server in a distributed computing environment.
- the client includes an object, which is associated with an application or another object resident on the server.
- the client also includes a component programmed to create a remote instance of the object in the server session to which the client is connected. This may occur, for example, in response to invoking or referencing the object at the client.
- the server component creates the remote instance of the object and dynamically creates a stub for interfacing with the remote instance of the embedded object.
- the client component dynamically creates a proxy operatively associated with the stub.
- the proxy/stub pair marshals programmatic data (e.g ., instructions to the computer and/or user and other parameters) between the remote instance of the object and the client.
- a user interface for the remote object is generated in the server session and returned to the client for providing a visual representation indicative of the condition of the remote object.
- a mechanism transparent to the client and the remote object is provided, which permits remote interaction from the client with the remote object running in the server session, as well as provides visual feedback of the remote object including based on the client interaction.
- the user interface and the programmatic data enable the remote object to be interacted with and/or controlled as if the remote object were running on the client.
- Another aspect of the present invention provides a system that includes a first computer running a first object having a second object that is associated with a remote object.
- the first computer In response to invoking the second object, the first computer operatively couples to a second computer running the remote object and virtualizes at the first computer a remote instance of the second object running in the remote object and a user interface related thereto via a dynamically created interface.
- Still another aspect of the present invention provides a system that includes a client execution context on a first computer.
- the client execution context has an object that is associated with a remote host not resident on the first computer.
- the first computer includes computer executable instructions for dynamically creating a remote instance of the object in the remote host in response to invoking the object at the first computer.
- the remote host generates a user interface for the remote instance of the object.
- User interface data is communicated between the first computer and the remote instance of the object via an interactive bi-directional communications channel between the client execution context and the remote host.
- Programmatic data also is communicated between the first computer and the remote instance of the object via the communications channel.
- the model includes a host object resident on a host computer having an object embedded therein.
- a remote instance of the embedded object is created in response to invoking the object embedded in the first object.
- a remote object on the remote computer that is operative to create the remote instance of the embedded object at the remote computer in response to invoking the embedded object.
- a user interface for the remote instance of the embedded object is generated at the remote computer.
- the host computer interactively couples to the remote instance of the embedded object via a dynamically created interface for bi-directional communications of programmatic and user interface data between the remote instance of the embedded object and the host computer.
- the user interface which provides visual feedback of the condition of the remote object
- communicating the programmatic data interaction between the host application and the remote instance of embedded object running on the remote computer is facilitated.
- Yet another aspect of the present invention relates to a method for facilitating interactive communications between a client and server in a distributed computing environment.
- the method includes running on the client a host object having an embedded object associated with a second object resident on the server.
- the embedded object is invoked at the client and a remote instance of the embedded object is created at the server.
- An interface between the client and the remote instance of the embedded object is created in response to invoking the embedded object.
- User interface and programmatic data are communicated between the remote instance of the embedded object and the client.
- the electronic signal includes computer-executable instructions for, in response to invoking a first object operatively associated with a second object running at a first of the at least two computers, creating at a second of the at least two computers a remote object corresponding to the first object.
- the electronic signal includes further computer-executable instructions for virtualizing at the first computer a user interface for the remote object via a dynamically created interface between the first and second of the at least two computers.
- Still another aspect of the present invention provides a computer-readable medium having computer-executable instructions for performing the acts running on a first computer a first object having a second object therein associated with a remote object not resident on the first computer.
- the first object is programmatically interfaced with the remote object on a remote computer to create a remote instance of the second object on the remote computer.
- User interface and programmatic data are communicated between the remote instance of the second object and the first computer.
- the present invention relates to a system and method for enabling interactive communication between a host object-oriented component running on client computer and a remote object-oriented component running on a remote computer in a distributed computing environment.
- the host object-oriented component has an object embedded therein, although an application associated with the embedded object is not resident on the client computer.
- the associated application is resident on the remote computer.
- Fig. 1 is a block diagram which schematically illustrates an example of a distributed computing system 10 for providing interactive communication between component objects located on different computers in accordance with the present invention.
- the system 10 includes a local or client computer 12, such as a personal computer, a workstation, etc.
- the client computer 12 is operatively coupled to a remote computer or server 14 via a communications link or channel, indicated at 16.
- the computers 12 and 14 communicate via the channel 16 by employing an agreed upon network communications protocol.
- the communications channel 16 connects the client computer 12 to a Terminal Server session of the server 14.
- Terminal Server provides a multi-user core that supports the ability to host multiple, concurrent client sessions on an operating system, such as versions 4.0 and higher of the WINDOWS NT SERVER® operating systems developed by Microsoft Corporation of Redmond, Washington.
- Terminal Server employs a Remote Desktop Protocol (RDP), which allows a client to communicate with the Terminal Server over the network connection.
- RDP Remote Desktop Protocol
- the Terminal Server session enables applications to execute on the server and communicate the remotely generated user interface over a connection which is displayed locally at the client.
- Terminal Server Website For additional information on Terminal Server, reference may be made to the Terminal Server Website at http: ⁇ www.microsoft ⁇ com ⁇ ntserver ⁇ basics ⁇ terminalserver. It is to be understood and appreciated that the present invention is platform and operating system independent; other operating systems and other communications protocols may be employed to implement the present invention.
- a Distributed Computing Environment (DCE) Object Remote Procedure Call (ORPC) facility may be employed to connect the remote computer 14 with the client computer 12 via the channel 16, although other facilities may also be used.
- DCE Distributed Computing Environment
- ORPC Object Remote Procedure Call
- WINDOWS NT ® operating system from Microsoft of Redmond, Washington, for example, provides DCE ORPC functionality via an ORPC channel object that encapsulates the details about the underlying cross-process and cross-network transport.
- the DCE ORPC channel object employs a generic ORPC transport provider interface to communicate with a remote transport protocol.
- the transport provider interface acts as thin layer between the DCE ORPC facility and the network transport, mapping ORPC operations onto the functions provided by the network transport.
- the ORPC facility implements transport providers (e.g ., DLLs) for named pipes, NetBIOS, TCP/IP, DECnet, and others. Additional transports also may be supported by writing new provider DLLs that interface with the ORPC channel object.
- transport providers e.g
- the client computer 12 has a local host object 20, such as an application running resident on the client computer.
- the local host 20 also includes an object 22 embedded therein.
- the embedded object 22 cannot run locally at the client computer 12, however, as there is no corresponding host container or application resident on the client computer.
- the embedded object 22 is associated with a remote host 26, which may be an object such as an application resident on the server computer 14.
- the remote host 26 operates as a surrogate container object for remote objects, including the object 22.
- the object 22 is embedded in the host application (or object) by employing Object Linking and Embedding (OLE), such as OLE Version 2 by Microsoft Corporation of Redmond, Washington.
- OLE Object Linking and Embedding
- OLE is based on COM and allows the creation of objects of different formats that operate on object data through defined interfaces.
- OLE enables object data to be embedded within an application or object (or linked to it), so that only a reference to the object data is stored in the object. While the following description refers to OLE, those skilled in the art will appreciate that a system and method, in accordance with the present invention, may utilize other linking and/or embedding technologies.
- invoking the embedded object 22 results in a remote instance 32 of the embedded object to be created at the server 14.
- invocation of the embedded object 22 effects a request for an interface associated with the second application.
- a control container 34 is created in the execution context of the local host 20 that contains a control object.
- the control object includes an interface 36, which is treated internally at the client 12 just like an interface to the actual object.
- the control object of the container 34 for example, exposes a method that permits client-side code to create the remote object 32 in the Terminal Server session to which the client 12 is connected to the server 14 via communications channel 16.
- a user interface is generated at the server computer 14 for the remote object 32.
- the remote object 32 (e.g ., its application context) and its user interface are virtualized (indicated as 38) at the client computer 12 via a dynamically created interface.
- the virtualization 38 of the remote object 32 at the client computer includes programmatic data and user interface (UI) information, as if the remote object were running locally on the client computer 12.
- Programmatic data may include instructions to the computer and user, computer-executable instructions created or modified in response to other instructions, and/or other parameters/data which may be employed in a computing process.
- the communications channel 16 includes two channel parts, which may employ the same or different communications protocol(s).
- the communications channel 16 may be programmable so as to map policies between the caller's context and the object's context.
- a first part of the channel 16 employs an appropriate communications protocol over the channel 16 so that the cross-network and cross-context communications appear transparent to both the client computer 12 and the remote object 32.
- the first part of the channel 16 is employed to communicate parameters and other data (e . g ., input parameters, status, exception information, etc.) between the remote object 32 and the client computer 12.
- cross-context method calls may be made on the remote object 32 via the first channel part as if the object was local relative to the local host 20.
- the channel 16 is used to communicate UI data between the remote object 32 and the client computer 12.
- the UI information is generated at the server computer 14 by the remote object 32 and is provided to the client computer 12, such as by employing RDP.
- the UI information may include data indicative of a graphical interface as well as associated program data (e.g ., an application or instructions) for controlling a display 40 at the client computer 12.
- the UI information provides the local host 20 with UI capabilities, including display, keyboard and/or pointer redirection.
- program instructions may interact with and manipulate the remote object 32 via the first channel part, with the interactions being reflected in the UI that is generated at the server 14 and remoted to the client 12 via the second channel part.
- the control 34 facilitates communication of the remote UI data from the remote computer 14 so that a visual indication of the remote UI is provided to the display 40.
- the graphical UI for the remote object 32 running on the server 14 and graphics of the local host 20 running on the client computer 12 are able to share a window area of the display 40 at the client computer.
- the remotely generated UI draws to a known window address at the client computer 12 by employing a suitable protocol in the second part of the channel 16.
- the remotely generated UI appears embedded in the local host 20 in substantially the same manner as if the remote object were running locally at the client computer 12. Any changes to the remote object 32 thus may be stored locally at the client 12 as a modified version of the object embedded within the local host 20, which saving may occur in the form of programmatic data communicated via the channel 16.
- Figs. 2a-2c illustrate a system 100 for providing interactive communications between a client and a remote object in accordance with an aspect of the present invention. More particularly, Figs. 2a-2c provide a step-by-step representation of how an interactive communications channel is established and maintained between the remote object and the client or caller in accordance with an aspect of the present invention.
- the system 100 includes a client computer 102 operatively coupled to a server computer 104 via a communications link 106.
- the client computer 102 is connected to a session 107 (e.g ., a Terminal Server session) at the server computer 104.
- a session 107 e.g ., a Terminal Server session
- appropriate protocol is employed for communications between the client computer 102 and the server computer 104, such as the ORPC described above.
- the client computer 102 includes a local host 108, such as an object (e.g ., an application) running resident on the client computer.
- the host 108 has an object 110, such as an OLE object, embedded in the host application.
- the object 110 is associated with another object or component (e.g. an application) that is not resident on the client computer 102, but that is available on the server computer 104.
- the client computer 102 is programmed to include an object, such as in the form of a control.
- the object facilitates the creation of a remote object in a different execution context.
- the object may be a function or method, such as a RemoteCreateObject method, which is operative to create a remote object on a remote computer, such as in response to invoking an object at the client 102 requiring an object or application in a different execution context.
- the RemoteCreateObject method may employ parameters indicative of the object that is to be created to specify which object is to be created in response to the invocation.
- the parameter may include: a unique object identifier (e.g., PROGID); a unique identifier to an interface of a specific object (e.g., UUID); and/or a moniker for a document/data object on a remote computer, in which case the appropriate object to interact with that document will be remotely created.
- the RemoteCreateObject method extends the creation mechanism for an object to allow creation of objects on the remote computer 104. Since, in this example, only OLE or other control data is modified, the methodology is compatible with existing OLE client/server applications. As a result, existing OLE objects do not have to be changed or recompiled to be compatible with the system 100.
- parameters or criteria indicative of the object, which is to be created in response to invoking the embedded object also may be utilized in accordance with the present invention.
- Such parameters may vary depending on the operating system and platform in which the system 100 is being implemented.
- an operating system registry (e.g ., the registration database) stores relevant information about object components according to their Globally Unique Identifiers (GUIDs) or PROGram IDentifiers (PROGIDs).
- GUIDs Globally Unique Identifiers
- PROGIDs PROGram IDentifiers
- the client computer 102 stores information related to the GUID or PROGID of the embedded object 110, which enables the client to locate executable code associated with the embedded object.
- the local system also may query a remote (or local) database to determine a suitable remote server for creating the remote object. For example, the client computer may search the Internet to locate a particular object (e.g., "Where can I find a VISIO® object?").
- the client computer 102 calls the RemoteCreateObject application to pass the GUID or PROGID of the embedded object to an interface 112 for creating an instance of application associated with the embedded object.
- invoking (or referencing) the object 110 may, in accordance with an aspect of the present invention, cause a local control object (or a method or function) within the system to locate an appropriate mechanism capable of creating an instance of the object.
- the discovery mechanism dynamically establishes an appropriate proxy/stub pair to enable bi-directional and interactive communication between the client computer and a remote instance of the object on the server computer 104 located by the discovery mechanism.
- the client computer 102 further is programmed to include a control container 114 having one or more control objects that may implement the request.
- the control container 114 is operatively associated with (or linked to) the interface 112.
- An example of a suitable control object is an ACTIVEX® control, which is well known to those skilled in the art.
- ACTIVEX® controls provide an effective way of encapsulating functionality in a variety of platforms.
- ACTIVEX® controls may be written in any number of programming languages.
- ACTIVEX® controls are based on OLE controls and are COM based components (or objects), which may be inserted into an application or other object to reuse preprogrammed packaged functionality.
- For additional information concerning ACTIVEX® controls see "ActiveX Controls Inside Out, Second Edition" by Adam Denning, Microsoft Press, Redmond, Washington, 1997, which is incorporated herein by reference.
- the server computer 104 includes a remote host application 116 (or component), which runs in the Terminal Server session to which the client 102 is connected.
- the remote host application 116 is employed as a host for creating remote objects in accordance with an aspect of present invention.
- control object 114 sends a request data packet to the remote host application 116 via the communications link requesting creation of a remote instance of the embedded object 110.
- the request includes the GUID or PROGID (or other data) of the embedded object 110 to identify the specific embedded object.
- the remote host application 116 creates a remote object 120 in the remote session 107 corresponding to the embedded object 110 at the client 102.
- the remote object 120 includes an interface 122, such as, for example, an IDispatch interface.
- IDispatch is a Microsoft COM interface which supports methods that make calls to objects, such as the remote object 120 created by the remote host application 116.
- the IDispatch interface is described in greater detail in U.S. Patent No. 5,515,536, which is entitled "Method and System for Invoking Methods of an Object Through a Dispatching Interface," which is incorporated herein by reference.
- the remote host application 116 In order to provide for substantially transparent communication of programmatic data across context boundaries defined by the remote object 120 and the host 108 at the client 102, the remote host application 116 also dynamically creates a stub object 124 for the remote object's IDispatch interface 122.
- the control object 114 at client 102 also dynamically creates a proxy object 126 for the remote IDispatch interface 122 and binds it to the stub 124 associated with the remote object 120.
- the communications channel 106 includes two parts.
- a first channel part 130 is for communicating programmatic data between the proxy/stub pair, and the second channel part 132 is for communicating UI data between the client computer 102 and the remote object 120.
- the communications channel 106 may be programmable, such as employing a DCE ORPC facility, to facilitate inter-context communication between the remote object 120 and the client 102.
- the channel 106 also may selectively allocate the channel bandwidth for the UI information (channel part 132) and the programmatic data (channel part 130) being communicated.
- the communications channel 132 for example, employs a communications protocol, such as the Remote Desktop Protocol (RDP) developed by Microsoft Corporation of Redmond, Washington.
- RDP Remote Desktop Protocol
- the RDP protocol provides for bi-directional communications of UI data between the client 102 and the remote object at the server 104 via part 132 of the communications channel 106.
- the channel part 132 may further subdivide its communications of UI into separate channels for different types of UI information (e . g ., one channel for mouse and keyboard information and another for video communicated back to the client computer).
- any communications protocol (or a combination of different protocols) may be employed that enables communication of programmatic data in conjunction with the communication of a UI data so that the remote object 120 and associated controls may be manipulated at the client 102 by code or user interaction with the UI as if the components were installed locally.
- the proxy/stub pair employs a well-defined request/response protocol via an associated communications channel 130 that is transparent to both the caller (the host 108 at the client 102) and the remote object 120.
- the communications channel 130 is part of the communications channel 106 between the client 102 and the remote server session 107.
- the proxy object 126 marshalls the call context (e.g., input parameters from the client) of each method and forwards them to the stub 124 as a request message.
- the stub object 124 receives the request, unmarshalls the call context, and calls the remote object 120 for executing the request.
- any results, exceptions, and/or output parameters are marshalled by the stub 124 and are sent back to the proxy 126 in a response message.
- the proxy object 126 takes the response, unmarshalls the return value and any output parameters, and provides them to the client 102.
- the proxy object 126 looks just like the remote object 120, as the proxy knows the policies of the caller's context.
- the client 102 interacts with proxy object 126 as if it were executing locally in the host application's context. Because the remote object 120 is being called in its context by a stub object 124 that knows the policies of the remote object's context, the object also "thinks" the client 102 has made the call in the remote object's context.
- a UI is generated at the server 104 for the remote object 120.
- the UI includes a graphical UI (GUI) and associated programmatic data.
- GUI graphical UI
- the UI information is generated in the context of the remote object 120 and communicated to the client computer 102 via another part 132 of the communications channel 106.
- the channel part 132 also communicates UI instructions, such as based on user interaction at the client, from the client computer 102 to the remote object 120 via, for example, the remote host 116.
- the client computer 102 includes a display 140 in which graphical features and user interfaces associated with programs running locally on the client, including the host 108, and those of the remote object 120 may be displayed.
- the UI information communicated via the second channel part 132 may be passed to a window address at the client 102.
- both the local host 108 and the remote object 120 may share one area of the display 140 at the client 102 in a real time manner.
- the remotely generated UI appears embedded in the local host 108 in substantially the same manner as if the remote object were running locally at the client computer 102. Any changes to the remote object 120 may be stored locally at the client 102 as a modified version of the object 110 embedded within the local host 108, with the data to be stored at the client being communicated as programmatic data via the channel 130.
- an application or object associated with the embedded object may need to be installed locally.
- script or other controls associated with the client 102 may be employed to enable interaction with a remote instance of the embedded object as if the application were running locally.
- any compiled code may be utilized to access a remote object provided that the code uses standard interfaces, such as, for example, the IDispatch interface described above.
- the system 100 in accordance with the present invention, also enables the user to interact with the remote object 120 and visually see the results of the interactions even though the application is not running locally.
- Fig. 3 illustrates an example of a distributed computing environment 200, in which a client computer 202 is operatively connected to multiple remote servers 204 and 206.
- the client computer 202 includes a host application context 210 having one or more embedded objects (not shown), such as OLE objects or ACTIVEX® controls. In this particular example, at least some of the embedded objects are associated with applications that are not resident on the client computer 202.
- the client computer 202 is programmed to include a control (e.g., an ACTIVEX® control) that is called into the host application context in response to invoking an object ( e . g ., by referencing) at the client computer.
- a control e.g., an ACTIVEX® control
- an object is associated with an HTML document that is in the execution context 210 at the client computer 202.
- a corresponding application for the object resides in the Internet server 206.
- the client 202 is operatively coupled to the Internet server 206 through a network 216, such as the World Wide Web via conventional communications links 218 and 220.
- a network 216 such as the World Wide Web
- servers 206, 222 and 224 are coupled to the network 216.
- the client computer 202 is connected to the network 216 via the communications link 218, such as by a modem or other appropriate connection device. Accordingly, low-level communications between the remote server 206 and the client computer 202 may occur in a conventional manner.
- Client-side script 214 may be programmed to call a first control 226 to create a remote instance 230 of the object at the server 206 and establish a transparent interactive communications channel between the client 202 and the remote object. More particularly, in response to invocation of the first object (e.g., by referencing the embedded object), the script 214 calls the control 226 into its context. Alternatively, the control 226 may automatically be called into context in response to invoking the object, such as being preprogrammed as part of the host computer's operating system. The alternative approach also makes the entire virtualization of the remote object 230 at the client computer 210 transparent to the controls involved in establishing and maintaining the communications.
- the control 226, exposes a method that sends a request (e . g ., including GUID or PROGID of the embedded object) to the remote server 206 requesting creation of a remote object 230.
- a request e . g ., including GUID or PROGID of the embedded object
- a proxy/stub pair is dynamically created to marshall requests, response, and other control information between the client 202 and the remote object 230.
- a UI for the remote object 230 also is manufactured at the remote server 206 and communicated to the client 202 by employing an appropriate protocol via an established communications channel implemented within the communications path 218, 216, 220.
- the channel may be programmable to facilitate data communications between the context of the host application 210 and the context of the remote object 230. From the perspective of the host application 210 (and a user of the client computer 202), the remote object 230 appears to be running locally on the client computer as the interfaces provided by the control 226 implement policies corresponding to the remote object 230.
- code and user interactions implemented at the client computer 202 are communicated as programmatic data via the communications channel between the remote object 230 and the client.
- the UI of the remote object 230 also may vary in response to the programmatic data received from the client 202, such as based on client-side scripting and/or user interactions).
- a graphical portion of the UI transmitted to the client 202 is provided to a display 232 of the client. Accordingly, the remotely generated UI and the host application may share an area of the client display 232.
- the host application 210 (or another object on the client computer 202), for example, has another embedded object associated with an application resident on the remote server 204.
- the remote server 204 is operatively coupled to the client computer 202 through a local area network (LAN), indicated schematically at 234.
- the client 202 is connected, for example, to a Terminal Server session on the server 204.
- a control 236 is called into the host application context 210 in response to invocation of the other embedded object.
- the control object 236 exposes a method, which sends a request packet to the remote server 204 requesting creation of an instance 238 of the embedded object according to the attributes of the embedded object.
- a proxy/stub pair also is created to marshall programmatic data between the client 202 and the remote object 238.
- a UI also is manufactured at the remote server 204 for the remote object 238, which UI varies in response to the programmatic data communicated between the proxy/stub pair.
- the remotely manufactured UI is communicated from the remote server 204 to the client 202 by employing an appropriate protocol (e . g ., RDP) via the communications channel connecting the remote session at the server 204 and the client 202.
- RDP appropriate protocol
- a graphical portion of the UI is displayed on the display 232, with the display showing variations of the remote object 238 in response to UI and/or programmatic data communicated from the client 202 to the remote object. Any changes to the remote object 238 may be stored locally at the client 202 as a modified version of the object embedded within the host application 210.
- the system 200 may employ a conventional mechanism (e.g ., COM) to create an object 240 in another execution context 242 within the client computer 202 for an object embedded in the host application.
- the object 240 is a conventional COM object, with conventional communication mechanisms being employed to relate information between the execution context of the remote object 240 and the host application 210.
- a control 244 is exposed for the embedded object, but instead of the control 244 creating a remote instance of the object across a network communications link in accordance with the present invention, the control 244 creates a remote instance of the object in another execution context 242 of the client computer 202.
- a proxy/stub pair also is created to marshall programmatic data between execution contexts 210 and 242.
- the UI from the remote object may be sent directly to the display 232 in a conventional manner, as it is created locally at the client 202.
- any of the objects 230, 238, and 240 also may contain one or more embedded objects that require an application not resident on their corresponding computer. Activation of such embedded objects in the distributed computing environment 200 may, in accordance with an aspect of the present invention described herein, result in establishing an interactive communications channel (for programmatic data and UI information) between each host application context and a remote instance of the object. As result, there may be a chaining effect, in which multiple remote objects have remote instances of embedded objects operating at various computers in the distributed system 200.
- an email application running locally at the client computer 202 may, in accordance with the present invention, create an object 230, such as a word processing document object, which runs in a word processing application on the remote server 206.
- the object 230 may, in turn, contain another object embedded therein, such as a spreadsheet object associated with a spreadsheet application not resident on the remote server 206. If the word processing application at the remote server 206 invokes the spreadsheet application that is not local to the remote server, a remote instance of the spreadsheet may be created in accordance with an aspect of the present invention, such as either at the client 202 or at another remote server ( e.g ., the server 222 or 224).
- FIG. 4 and the following discussion are intended to provide a brief, general description of a suitable computing environment 300 in which the various aspects of the present invention may be implemented. While various aspects of the invention have been described above in the general context of computer-executable instructions of a computer program that runs on a local computer and/or remote computer, those skilled in the art will recognize that the invention also may be implemented in combination with other program modules. Generally, program modules include routines, programs, components, data structures, etc. that perform particular tasks or implement particular abstract data types.
- inventive methods may be practiced with other computer system configurations, including single-processor or multiprocessor computer systems, minicomputers, mainframe computers, as well as personal computers, hand-held computing devices, microprocessor-based or programmable consumer electronics, and the like.
- an exemplary distributed computer system environment 300 for implementing the various aspects of the invention includes a conventional computer 302, including a processing unit 304, a system memory 306, and a system bus 308 that couples various system components including the system memory to the processing unit 304.
- the processing unit 304 may be any of various commercially available processors, including but not limited to Intel x86, Pentium and compatible microprocessors from Intel and others, including Cyrix, AMD and Nexgen; Alpha from Digital; MIPS from MIPS Technology, NEC, IDT, Siemens, and others; and the PowerPC from IBM and Motorola. Dual microprocessors and other multi-processor architectures also may be used as the processing unit 304.
- the system bus 308 may be any of several types of bus structure including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of conventional bus architectures such as PCI, VESA, Microchannel, ISA, and EISA, to name a few.
- the system memory 306 includes read only memory (ROM) 310 and random access memory (RAM) 312.
- ROM read only memory
- RAM random access memory
- BIOS basic input/output system
- BIOS basic routines that help to transfer information between elements within the computer 302, such as during start-up, is stored in ROM 310.
- the computer 302 also may include, for example, a hard disk drive 314, a magnetic disk drive 316, e.g., to read from or write to a removable disk 318, and an optical disk drive 320, e.g., for reading a CD-ROM disk 322 or to read from or write to other optical media.
- the hard disk drive 314, magnetic disk drive 316, and optical disk drive 320 are connected to the system bus 308 by a hard disk drive interface 324, a magnetic disk drive interface 326, and an optical drive interface 328, respectively.
- the drives and their associated computer-readable media provide nonvolatile storage of data, data structures, computer-executable instructions, etc. for the computer 302.
- computer-readable media refers to a hard disk, a removable magnetic disk and a CD
- other types of media which are readable by a computer such as magnetic cassettes, flash memory cards, digital video disks, Bernoulli cartridges, and the like, may also be used in the exemplary operating environment 300, and further that any such media may contain computer-executable instructions for performing the methods of the present invention.
- a number of program modules may be stored in the drives and RAM 312, including an operating system 330, one or more application programs 332, other program modules 334, and program data 336.
- the operating system 330 in the illustrated computer is, for example, the MICROSOFT WINDOWS NT® operating system available from Microsoft Corporation, of Redmond, Washington, although it is to be appreciated that the present invention may be implemented with other operating systems or combinations of operating systems.
- a user may enter commands and information into the computer 302 through one or more user input devices, such as a keyboard 338 and a pointing device ( e.g ., a mouse 340).
- Other input devices may include a microphone, a joystick, a game pad, a satellite dish, a scanner, or the like.
- These and other input devices are often connected to the processing unit 304 through a serial port interface 342 that is coupled to the system bus 308, but may be connected by other interfaces, such as a parallel port, a game port or a universal serial bus (USB).
- a monitor 344 or other type of display device is also connected to the system bus 308 via an interface, such as a video adapter 346.
- a computer typically includes other peripheral output devices (not shown), such as speakers, printers etc.
- the computer 302 operates in a networked environment using logical connections to one or more remote computers, such as a remote computer 348.
- the remote computer 348 may be a workstation, a server computer, a router, a peer device or other common network node, and typically includes many or all of the elements described relative to the computer 302, although, for purposes of brevity, only a memory storage device 362 is illustrated in Fig. 4.
- the logical connections depicted in Fig. 4 include a local area network (LAN) 364 and a wide area network (WAN) 366.
- LAN local area network
- WAN wide area network
- the computer 302 When used in a LAN networking environment, the computer 302 is connected to the local network 364 through a network interface or adapter 368. When used in a WAN networking environment, the computer 302 typically includes a modem 370, or is connected to a communications server on the LAN 364, or has other means for establishing communications over the WAN 366, such as the Internet.
- the modem 370 which may be internal or external, is connected to the system bus 308 via the serial port interface 342.
- program modules or components depicted relative to the computer 302, or portions thereof, may be stored in the remote memory storage device 362 at the remote computer 348. It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between the computers 302 and 348 may be used.
- the present invention has been described with reference to acts and symbolic representations of operations that are performed by a computer, such as the computer 302 or remote computer 348, unless otherwise indicated. Such acts and operations are sometimes referred to as being computer-executed. It will be appreciated that the acts and symbolically represented operations include the manipulation by the processing unit 304 of electrical signals representing data bits which causes a resulting transformation or reduction of the electrical signal representation, and the maintenance of data bits at memory locations in the memory system (including the system memory 306, hard drive 314, floppy disks 318, and CD-ROM 322) to thereby reconfigure or otherwise alter the computer system's operation, as well as other processing of signals.
- selected portions of the computer executable instructions may, in accordance with an aspect of the present invention, be performed at either computer 302, 348, according to the component objects associated with each computer, based on method calls at each computer.
- the memory locations where such data bits are maintained are physical locations that have particular electrical, magnetic, or optical properties corresponding to the data bits.
- a process object comprises the following elements: an executable program; a private address space; system resources (e.g., communication ports and files) that the operating system allocates to the process as the program executes; and at least one "thread of execution.”
- a "thread” is the entity within a process that the operating system kernel schedules for execution.
- each thread has an associated "context" which is the volatile data associated with the execution of the thread.
- a thread's context includes the contents of system registers and the virtual address belonging to the thread's process. Thus, the actual data comprising a thread's context varies as it executes.
- COM and DCOM are models used for object-oriented programming.
- COM specifies how objects within a single application or between applications (e.g. client/server applications) interact and communicate by defining a set of standard interfaces. Interfaces are groupings of semantically related functions through which a client application accesses the services of a server application.
- OLE Object Linking and Embedding
- OLE Version 2 and ACTIVEX® controls developed by the Microsoft Corporation of Redmond, Washington
- OLE Version 2 and ACTIVEX® controls developed by the Microsoft Corporation of Redmond, Washington
- the object data can be embedded within an object, or linked to it, so that only a link reference to the data is stored in the object.
- a methodology which may be implemented in accordance with the present invention, will be better appreciated with reference to the flow diagram of Fig. 5. While, for purposes of simplicity of explanation, the methodology of Fig. 5 is shown and described as a series of steps, it is to be understood and appreciated that the present invention is not limited by the order of steps, as some steps may, in accordance with the present invention, occur in different orders and/or concurrently with other steps from that shown and described herein. Moreover, not all illustrated steps may be required to implement a methodology in accordance with the present invention.
- the process begins at step 400 in which a host application (or object) is running in an associated execution context at a client computer.
- the host application includes an object embedded therein, which is associated with an application or other object, such as a control, not resident on the client computer.
- the application to which the embedded object is associated is resident at the remote computer.
- the client computer may be programmed with data (e.g ., in system registry) to know the location of a specific object corresponding to the embedded object.
- the client may be programmed with appropriate functionality (controls and interfaces) to determine a location of an appropriate application context for creating a remote instance of the embedded object, such as based on its GUID or PROGID associated with the embedded object.
- step 410 the embedded object is invoked, such as in response to making a reference to the object (by user interaction or client-side script).
- step 420 in which an appropriate control container, such as an ACTIVEX® control container is called into context of the host application.
- the ACTIVEX® control container provides an environment that can host a remote object. This may be implemented, for example, by a client-side script passing the GUID or PROGID of the object to an appropriate control in response to referencing the embedded object.
- step 430 the process proceeds to step 430.
- a connection is established between the client and a session at a remote server, such as a Terminal Server session.
- the connection includes a communications channel that employs an appropriate communications protocol.
- the communications channel includes an ORPC channel facility that encapsulates the details of the cross-process and cross-network transport.
- the communications channel also may employ an appropriate protocol (e.g ., RDP) for facilitating UI features generated in the Terminal Server session to appear locally at the client via the communications channel.
- RDP appropriate protocol
- the Terminal Server session may exist between the client and the remote server prior to invoking the embedded object.
- a common protocol may be employed to communicating both UI and programmatic data between the client and the remote object.
- a request is sent to the remote server to create a remote instance of the object.
- the request also may specify which interface of the remote object is requested. This may be implemented, for example, by the control sending an appropriate request or method call to a remote host application.
- the remote host creates the remote object, which, for example, has an associated IDispatch interface through which the instantiated remote object may be accessed.
- the remote host dynamically creates a stub for the IDispatch interface.
- the control at the client dynamically creates a proxy and binds the proxy to the stub.
- the transparent communications layer provided by the proxy/stub pair in conjunction with the part of the communications channel for remoting UI information, provide an interactive communication channel between the remote object and the client in accordance with an aspect of the present invention (step 480).
- the proxy/stub pair provides a transparent communications layer between the context of the remote object and the client. That is, the proxy/stub pair marshalls and unmarshalls programmatic data (step 490) between the client and remote object.
- the proxy is an object that marshalls call context of each method or request from the client and forwards an invocation request to the stub.
- the stub unmarshalls the parameters from the invocation request and executes the call with the remote object in its execution context.
- the stub further marshalls status information (e.g ., return code, exception information, etc.) from the remote object, which information is returned to the client proxy.
- the client proxy in turn, unmarshalls the programmatic data from the stub and provides it to the appropriate execution context of the client.
- the proxy/stub pair enables the communication of programmatic data to occur to the client and remote object as if being performed locally within their respective computers.
- step 500 a determination is made as to whether the unmarshalled parameter(s) is an interface pointer.
- An interface pointer for example, corresponds to an instance of another object that is being or has been created.
- the object associated with the pointer may, in accordance with the present invention, be created at the client computer, the remote computer, or at another computer that is operatively coupled to the host (client or server computer) requesting creation of the object. If the parameter is an interface pointer, the process proceeds to step 510.
- the remote server At step 520, the remote server generates UI information indicative of the condition and/or status of the remote object.
- the process then proceeds to step 540, in which the remotely generated UI information is communicated to the client via the communications channel.
- the UI information varies based on the user interactions and code manipulation of the remote object, which is communicated as programmatic data from client proxy and unmarshalled by the stub (step 490).
- client-side script and/or user interaction at the client may control and/or modify the condition of the remote object as if the object were local.
- the client-side interactions are communicated to the remote object as programmatic data via the proxy/stub pair for execution by the remote object, which may (depending on the interactions) effect changes in the UI associated with the remote object.
- the UI and programmatic data may be merged into a single, bi-directional data stream that employs a common protocol (e.g., RDP).
- the UI is modified and, in turn, updated UI information is communicated to the client for implementation as part of the client-side display of the remote object.
- the UI displayed locally reflects real-time changes in the UI that occur based on client-side interactions so that the remote object may be manipulated as if it were local on the client computer.
- the remote object and the host application may share the same display at the client computer.
- the remotely generated UI even may be directed to an appropriate window address.
- the release for example, is based on the value of a reference counter maintained at the client. When the reference counter reaches zero, indicating that no outstanding references exist for the remote object, a release packet is sent to the stub to release the remote object. If this determination (step 550) is negative, the process returns to step 490 to enable interactive communication of both programmatic and UI data between the client and the remote object.
- step 550 If the determination at step 550 is affirmative, indicating that a client has sent a release packet to the remote server to release the remote object, the process proceeds to step 560 in which the remote object is released. As a result of removing the remote object from the execution context of the remote session, the proxy/stub pair also is removed from their respective contexts. From step 560, the process proceeds to step 570 in which the process ends.
- a system or method in accordance with the present invention facilitates management of container applications, as it allows a remote instance of a COM object embedded in a host application to be created and maintained at a remote server ( e . g ., in a Terminal Server session) for manipulating the remote object.
- a remote server e . g ., in a Terminal Server session
- load balancing also is facilitated as COM applications may be employed at a few selected servers to enable a multitude of clients to create a plurality of fully interactive remote objects on the selected servers.
- Another benefit of the present invention is that is also permits powerful hybrid applications to be implemented across a network, with the more complex and/or sophisticated programming being resident on one or more remote servers to which the client has access.
- a remote instance therefore may be created dynamically at an appropriate server.
- a web page or word processing application may be running locally on a client, but have an embedded object associated with an application not resident on the client.
- the required application may be a newer version than installed on the client or be an application simply not installed on the client, such as a spreadsheet application or a technical drawing package.
- invoking the embedded object results in an interactive remote instance of the embedded object to be created remotely at a server to which the client is connected.
- UI and programmatic data is communicated between the client and the remote instance of the object, thereby enabling full interaction between the client and the remote object as if it were local on the client.
- the remote object appears to be running locally on the client.
- the remote object "thinks" that the host application that called the application is in the context of the remote object.
- the client may interact with and manipulate the remote instance of the embedded object, with the UI thereof being provided to the client's display.
- the method is compatible with existing and previously written client and server object-oriented applications, and, therefore, can be used without modifying these existing applications.
- object references to objects not resident on a host computer can now be added to network object applications (e.g., in HTML or HTML URLs), greatly enhancing the variety and format of information available to network object applications. Accordingly, developers may quickly and cleanly create distributed client/server object applications, using a known and familiar object-oriented programming environment (e . g ., OLE), which decreases development time, and lowers overall development costs.
- OLE object-oriented programming environment
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
- Multi Processors (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
Description
- The present invention relates to communication between object-oriented applications. More particularly, the present invention relates to a system and method for interactive communication between a host object-oriented component on a host computer and a remote object-oriented component running on a remote computer in a distributed computing environment.
- Object-oriented programming has been developed to facilitate creation of new, reusable components as well as to make convenient and flexible upgrades to existing applications. Object-oriented software provides data abstraction, which hides the implementation details within objects, and thus lessens the impact of changes when modifications are made to the software. Object-oriented programming also provides data encapsulation and data type inheritance. Data encapsulation relates to coupling data to the functions that operate on the data. Inheritance refers to the ability to define a data type as an extension of other data types. An instance of a data type that couples data and functions is referred to as an object.
- The Component Object Model (COM) developed by Microsoft Corporation of Redmond, Washington, is an object-oriented programming model that provides a standard as to how objects within a single application or between applications (e.g. client/server applications) interact and communicate. COM defines a set of standard interfaces, which are groupings of semantically related functions through which a client application accesses the services of, for example, a server application.
- Object Linking and Embedding (OLE), such as OLE Version 2 and ACTIVEX® controls (network activation controls) developed by Microsoft Corporation of Redmond, Washington, are based on COM and allow the creation of objects of different formats which operate on data through defined interfaces, rather than operating on the applications responsible for the data. ACTIVEX® controls are based in part on OLE technologies, which enable object data to be embedded within an object, or linked to it, so that only a reference to the object data is stored in the object.
- One aspect of the OLE object system enables a client object-oriented application to have a reference to an object in an object application that does not share computer process memory (e.g., it operates in a different execution context) with the client application. In many client/server systems, both the client and server application exist within the same operating system process and, therefore, are able to share process memory. In order to facilitate an object reference to a remote object, two additional interface objects (e.g., a proxy-stub pair) are created. The proxy object, which looks and acts just like the real object, intercepts and forwards all calls to the real object through the channel to the stub object. The stub object, in turn, calls the real object. The communication between the proxy and stub is managed by a channel object, which sends information between the client and server processes. A standard interface, such as IDispatch, may be employed to facilitate remote automation across a network.
- With increasing network bandwidth, sophisticated distributed computing models and software applications are becoming available. The applications follow an object-oriented or component model, with larger applications often being divided into small containers or objects of program code and data. In a distributed computing environment, program objects are distributed to both server and clients, with the details of the network environment being hidden relative to the objects through the use of proxy and stub objects for transferring information over the network. Two competing standards for a distributed computing model are the Distributed Component Object Model (DCOM), developed by the Microsoft Corporation, and the Common Object Request Broker Architecture (CORBA), developed by the Object Management Group. These models specify how objects within a single application or between applications (e.g., client/server applications) interact and communicate by defining a set of standard interfaces.
- The present invention relates to a system and method for enabling interactive communication between a host object-oriented component running on client computer and a remote object-oriented component running on a remote computer in a distributed computing environment. The host object-oriented component has an object therein. An application or another object associated with the object, however, is not resident on the client computer. A remote instance of the object is created at the remote computer in the form of the remote object-oriented component. An interface also is dynamically created between the remote object-oriented component and the client computer to facilitate communication of both programmatic data and user interface data. As a result, the remote object may be manipulated as if it were local on the client computer.
- By way of example, the host object-oriented component may be a MICROSOFT® word processing document running on the client computer, which has an object in the form of a VISEO® document embedded therein, although no corresponding VISEO® application is resident on the client computer. A remote computer, however, does have a VISEO® application. When the embedded VISEO® document is invoked from within the word processing document running on the client computer, a remote instance of the embedded VISEO® document is created and associated with the VISEO® application running on the remote computer. An interface is dynamically created to facilitate communication of both programmatic data and user interface between the host-word processing document and the remote instance of the VISEO® document. The interface permits a user to manipulate the remote instance of the VISEO® document and view changes as if it were running locally on the client computer.
- According to another aspect of the present invention, a client is connected to a session of a remote server in a distributed computing environment. The client includes an object, which is associated with an application or another object resident on the server. The client also includes a component programmed to create a remote instance of the object in the server session to which the client is connected. This may occur, for example, in response to invoking or referencing the object at the client. The server component creates the remote instance of the object and dynamically creates a stub for interfacing with the remote instance of the embedded object. The client component, in turn, dynamically creates a proxy operatively associated with the stub. The proxy/stub pair marshals programmatic data (e.g., instructions to the computer and/or user and other parameters) between the remote instance of the object and the client. A user interface for the remote object is generated in the server session and returned to the client for providing a visual representation indicative of the condition of the remote object. As a result, a mechanism transparent to the client and the remote object is provided, which permits remote interaction from the client with the remote object running in the server session, as well as provides visual feedback of the remote object including based on the client interaction. Advantageously, the user interface and the programmatic data enable the remote object to be interacted with and/or controlled as if the remote object were running on the client.
- Another aspect of the present invention provides a system that includes a first computer running a first object having a second object that is associated with a remote object. In response to invoking the second object, the first computer operatively couples to a second computer running the remote object and virtualizes at the first computer a remote instance of the second object running in the remote object and a user interface related thereto via a dynamically created interface.
- Still another aspect of the present invention provides a system that includes a client execution context on a first computer. The client execution context has an object that is associated with a remote host not resident on the first computer. The first computer includes computer executable instructions for dynamically creating a remote instance of the object in the remote host in response to invoking the object at the first computer. The remote host generates a user interface for the remote instance of the object. User interface data is communicated between the first computer and the remote instance of the object via an interactive bi-directional communications channel between the client execution context and the remote host. Programmatic data also is communicated between the first computer and the remote instance of the object via the communications channel. As a result, interactive communications between the client execution context and the remote instance of the object is provided.
- Another aspect of the present invention provides an interactive distributed component object model. The model includes a host object resident on a host computer having an object embedded therein. A remote instance of the embedded object is created in response to invoking the object embedded in the first object. A remote object on the remote computer that is operative to create the remote instance of the embedded object at the remote computer in response to invoking the embedded object. A user interface for the remote instance of the embedded object is generated at the remote computer. The host computer interactively couples to the remote instance of the embedded object via a dynamically created interface for bi-directional communications of programmatic and user interface data between the remote instance of the embedded object and the host computer. As a result of remoting the user interface (which provides visual feedback of the condition of the remote object) and communicating the programmatic data, interaction between the host application and the remote instance of embedded object running on the remote computer is facilitated.
- Yet another aspect of the present invention relates to a method for facilitating interactive communications between a client and server in a distributed computing environment. The method includes running on the client a host object having an embedded object associated with a second object resident on the server. The embedded object is invoked at the client and a remote instance of the embedded object is created at the server. An interface between the client and the remote instance of the embedded object is created in response to invoking the embedded object. User interface and programmatic data are communicated between the remote instance of the embedded object and the client.
- Another aspect of the present invention provides an electronic signal adapted to be transmitted between at least two computers. The electronic signal includes computer-executable instructions for, in response to invoking a first object operatively associated with a second object running at a first of the at least two computers, creating at a second of the at least two computers a remote object corresponding to the first object. The electronic signal includes further computer-executable instructions for virtualizing at the first computer a user interface for the remote object via a dynamically created interface between the first and second of the at least two computers.
- Still another aspect of the present invention provides a computer-readable medium having computer-executable instructions for performing the acts running on a first computer a first object having a second object therein associated with a remote object not resident on the first computer. In response to invoking the first object, the first object is programmatically interfaced with the remote object on a remote computer to create a remote instance of the second object on the remote computer. User interface and programmatic data are communicated between the remote instance of the second object and the first computer.
- To the accomplishment of the foregoing and related ends, the invention, then, comprises the features hereinafter fully described and particularly pointed out in the claims. The following description and the annexed drawings set forth in detail certain illustrative aspects of the invention. These aspects are indicative, however, of but a few of the various ways in which the principles of the invention may be employed. Other objects, advantages and novel features of the invention will become apparent from the following detailed description of the invention when considered in conjunction with the drawings.
-
- Fig. 1 is a functional block diagram of a distributed computing system, illustrating interactive communications between a client object and server object, in accordance with the present invention;
- Fig. 2a is a functional block diagram of a distributed computing system, illustrating a first condition of the system, in accordance with an aspect of present invention;
- Fig. 2b is a functional block diagram of the system of Fig. 2a, illustrating a second condition of the system, in accordance with the present invention;
- Fig. 2c is a functional block diagram of the system of Fig. 2a, illustrating a third condition of the system, in accordance with the present invention
- Fig. 3 is a functional block diagram of a distributed computing system illustrating interactive communications between a client and multiple remote objects in accordance with the present invention;
- Fig. 4 is an exemplary operating environment for a system which may be configured to implement the present invention; and
- Fig. 5 is a flow diagram of an exemplary methodology in accordance with an aspect of present invention.
-
- The present invention relates to a system and method for enabling interactive communication between a host object-oriented component running on client computer and a remote object-oriented component running on a remote computer in a distributed computing environment. The host object-oriented component has an object embedded therein, although an application associated with the embedded object is not resident on the client computer. The associated application is resident on the remote computer.
- Fig. 1 is a block diagram which schematically illustrates an example of a distributed
computing system 10 for providing interactive communication between component objects located on different computers in accordance with the present invention. Thesystem 10 includes a local orclient computer 12, such as a personal computer, a workstation, etc. Theclient computer 12 is operatively coupled to a remote computer orserver 14 via a communications link or channel, indicated at 16. Thecomputers channel 16 by employing an agreed upon network communications protocol. - The
communications channel 16, for example, connects theclient computer 12 to a Terminal Server session of theserver 14. As is known in the art, Terminal Server provides a multi-user core that supports the ability to host multiple, concurrent client sessions on an operating system, such as versions 4.0 and higher of the WINDOWS NT SERVER® operating systems developed by Microsoft Corporation of Redmond, Washington. Terminal Server employs a Remote Desktop Protocol (RDP), which allows a client to communicate with the Terminal Server over the network connection. Briefly stated, the Terminal Server session enables applications to execute on the server and communicate the remotely generated user interface over a connection which is displayed locally at the client. For additional information on Terminal Server, reference may be made to the Terminal Server Website at http:\\www.microsoft\com\ntserver\basics\terminalserver. It is to be understood and appreciated that the present invention is platform and operating system independent; other operating systems and other communications protocols may be employed to implement the present invention. - By way of example, a Distributed Computing Environment (DCE) Object Remote Procedure Call (ORPC) facility may be employed to connect the
remote computer 14 with theclient computer 12 via thechannel 16, although other facilities may also be used. WINDOWS NT ® operating system from Microsoft of Redmond, Washington, for example, provides DCE ORPC functionality via an ORPC channel object that encapsulates the details about the underlying cross-process and cross-network transport. The DCE ORPC channel object employs a generic ORPC transport provider interface to communicate with a remote transport protocol. The transport provider interface acts as thin layer between the DCE ORPC facility and the network transport, mapping ORPC operations onto the functions provided by the network transport. The ORPC facility implements transport providers (e.g., DLLs) for named pipes, NetBIOS, TCP/IP, DECnet, and others. Additional transports also may be supported by writing new provider DLLs that interface with the ORPC channel object. - Referring back to Fig. 1, the
client computer 12 has alocal host object 20, such as an application running resident on the client computer. Thelocal host 20 also includes an object 22 embedded therein. The embedded object 22 cannot run locally at theclient computer 12, however, as there is no corresponding host container or application resident on the client computer. The embedded object 22 is associated with aremote host 26, which may be an object such as an application resident on theserver computer 14. Theremote host 26 operates as a surrogate container object for remote objects, including the object 22. - By way of example, the object 22 is embedded in the host application (or object) by employing Object Linking and Embedding (OLE), such as OLE Version 2 by Microsoft Corporation of Redmond, Washington. As mentioned briefly above, OLE is based on COM and allows the creation of objects of different formats that operate on object data through defined interfaces. Using OLE enables object data to be embedded within an application or object (or linked to it), so that only a reference to the object data is stored in the object. While the following description refers to OLE, those skilled in the art will appreciate that a system and method, in accordance with the present invention, may utilize other linking and/or embedding technologies.
- In accordance with an aspect of the present invention, invoking the embedded object 22 results in a
remote instance 32 of the embedded object to be created at theserver 14. For example, invocation of the embedded object 22 effects a request for an interface associated with the second application. In response to the request, acontrol container 34 is created in the execution context of thelocal host 20 that contains a control object. The control object includes aninterface 36, which is treated internally at theclient 12 just like an interface to the actual object. The control object of thecontainer 34, for example, exposes a method that permits client-side code to create theremote object 32 in the Terminal Server session to which theclient 12 is connected to theserver 14 viacommunications channel 16. A user interface is generated at theserver computer 14 for theremote object 32. The remote object 32 (e.g., its application context) and its user interface are virtualized (indicated as 38) at theclient computer 12 via a dynamically created interface. Thevirtualization 38 of theremote object 32 at the client computer includes programmatic data and user interface (UI) information, as if the remote object were running locally on theclient computer 12. Programmatic data may include instructions to the computer and user, computer-executable instructions created or modified in response to other instructions, and/or other parameters/data which may be employed in a computing process. - The
communications channel 16 includes two channel parts, which may employ the same or different communications protocol(s). Thecommunications channel 16 may be programmable so as to map policies between the caller's context and the object's context. A first part of thechannel 16 employs an appropriate communications protocol over thechannel 16 so that the cross-network and cross-context communications appear transparent to both theclient computer 12 and theremote object 32. In particular, the first part of thechannel 16 is employed to communicate parameters and other data (e.g., input parameters, status, exception information, etc.) between theremote object 32 and theclient computer 12. As a result, cross-context method calls may be made on theremote object 32 via the first channel part as if the object was local relative to thelocal host 20. - Another part of the
channel 16 is used to communicate UI data between theremote object 32 and theclient computer 12. In particular, the UI information is generated at theserver computer 14 by theremote object 32 and is provided to theclient computer 12, such as by employing RDP. The UI information may include data indicative of a graphical interface as well as associated program data (e.g., an application or instructions) for controlling adisplay 40 at theclient computer 12. The UI information provides thelocal host 20 with UI capabilities, including display, keyboard and/or pointer redirection. That is, program instructions, such as based on client-side code or user interactions, may interact with and manipulate theremote object 32 via the first channel part, with the interactions being reflected in the UI that is generated at theserver 14 and remoted to theclient 12 via the second channel part. Thecontrol 34 facilitates communication of the remote UI data from theremote computer 14 so that a visual indication of the remote UI is provided to thedisplay 40. As a result, the graphical UI for theremote object 32 running on theserver 14 and graphics of thelocal host 20 running on theclient computer 12 are able to share a window area of thedisplay 40 at the client computer. For example, the remotely generated UI draws to a known window address at theclient computer 12 by employing a suitable protocol in the second part of thechannel 16. As a result, the remotely generated UI appears embedded in thelocal host 20 in substantially the same manner as if the remote object were running locally at theclient computer 12. Any changes to theremote object 32 thus may be stored locally at theclient 12 as a modified version of the object embedded within thelocal host 20, which saving may occur in the form of programmatic data communicated via thechannel 16. - Figs. 2a-2c illustrate a
system 100 for providing interactive communications between a client and a remote object in accordance with an aspect of the present invention. More particularly, Figs. 2a-2c provide a step-by-step representation of how an interactive communications channel is established and maintained between the remote object and the client or caller in accordance with an aspect of the present invention. - With reference to Fig. 2a, the
system 100 includes aclient computer 102 operatively coupled to aserver computer 104 via acommunications link 106. Theclient computer 102 is connected to a session 107 (e.g., a Terminal Server session) at theserver computer 104. Accordingly, appropriate protocol is employed for communications between theclient computer 102 and theserver computer 104, such as the ORPC described above. Theclient computer 102 includes alocal host 108, such as an object (e.g., an application) running resident on the client computer. Thehost 108 has anobject 110, such as an OLE object, embedded in the host application. Theobject 110 is associated with another object or component (e.g. an application) that is not resident on theclient computer 102, but that is available on theserver computer 104. - The
client computer 102, for example, is programmed to include an object, such as in the form of a control. The object facilitates the creation of a remote object in a different execution context. By way of example, the object may be a function or method, such as a RemoteCreateObject method, which is operative to create a remote object on a remote computer, such as in response to invoking an object at theclient 102 requiring an object or application in a different execution context. The RemoteCreateObject method may employ parameters indicative of the object that is to be created to specify which object is to be created in response to the invocation. For example, the parameter may include: a unique object identifier (e.g., PROGID); a unique identifier to an interface of a specific object (e.g., UUID); and/or a moniker for a document/data object on a remote computer, in which case the appropriate object to interact with that document will be remotely created. The RemoteCreateObject method extends the creation mechanism for an object to allow creation of objects on theremote computer 104. Since, in this example, only OLE or other control data is modified, the methodology is compatible with existing OLE client/server applications. As a result, existing OLE objects do not have to be changed or recompiled to be compatible with thesystem 100. - It is to be appreciated that other parameters or criteria indicative of the object, which is to be created in response to invoking the embedded object, also may be utilized in accordance with the present invention. Such parameters, for example, may vary depending on the operating system and platform in which the
system 100 is being implemented. - On each host client/server operating system, an operating system registry (e.g., the registration database) stores relevant information about object components according to their Globally Unique Identifiers (GUIDs) or PROGram IDentifiers (PROGIDs). In particular, the
client computer 102 stores information related to the GUID or PROGID of the embeddedobject 110, which enables the client to locate executable code associated with the embedded object. The local system also may query a remote (or local) database to determine a suitable remote server for creating the remote object. For example, the client computer may search the Internet to locate a particular object (e.g., "Where can I find a VISIO® object?"). In response to invoking the embedded object (e.g., by user interaction or script referencing the object), theclient computer 102 calls the RemoteCreateObject application to pass the GUID or PROGID of the embedded object to aninterface 112 for creating an instance of application associated with the embedded object. - Alternatively, invoking (or referencing) the
object 110 may, in accordance with an aspect of the present invention, cause a local control object (or a method or function) within the system to locate an appropriate mechanism capable of creating an instance of the object. The discovery mechanism, in turn, dynamically establishes an appropriate proxy/stub pair to enable bi-directional and interactive communication between the client computer and a remote instance of the object on theserver computer 104 located by the discovery mechanism. - The
client computer 102 further is programmed to include acontrol container 114 having one or more control objects that may implement the request. Thecontrol container 114 is operatively associated with (or linked to) theinterface 112. An example of a suitable control object is an ACTIVEX® control, which is well known to those skilled in the art. ACTIVEX® controls provide an effective way of encapsulating functionality in a variety of platforms. Advantageously, ACTIVEX® controls may be written in any number of programming languages. ACTIVEX® controls are based on OLE controls and are COM based components (or objects), which may be inserted into an application or other object to reuse preprogrammed packaged functionality. For additional information concerning ACTIVEX® controls, see "ActiveX Controls Inside Out, Second Edition" by Adam Denning, Microsoft Press, Redmond, Washington, 1997, which is incorporated herein by reference. - The
server computer 104 includes a remote host application 116 (or component), which runs in the Terminal Server session to which theclient 102 is connected. Theremote host application 116 is employed as a host for creating remote objects in accordance with an aspect of present invention. - With reference to Fig. 2b, the
control object 114 sends a request data packet to theremote host application 116 via the communications link requesting creation of a remote instance of the embeddedobject 110. The request includes the GUID or PROGID (or other data) of the embeddedobject 110 to identify the specific embedded object. - The
remote host application 116 creates aremote object 120 in theremote session 107 corresponding to the embeddedobject 110 at theclient 102. Theremote object 120 includes aninterface 122, such as, for example, an IDispatch interface. IDispatch is a Microsoft COM interface which supports methods that make calls to objects, such as theremote object 120 created by theremote host application 116. The IDispatch interface is described in greater detail in U.S. Patent No. 5,515,536, which is entitled "Method and System for Invoking Methods of an Object Through a Dispatching Interface," which is incorporated herein by reference. - In order to provide for substantially transparent communication of programmatic data across context boundaries defined by the
remote object 120 and thehost 108 at theclient 102, theremote host application 116 also dynamically creates astub object 124 for the remote object'sIDispatch interface 122. Thecontrol object 114 atclient 102 also dynamically creates aproxy object 126 for theremote IDispatch interface 122 and binds it to thestub 124 associated with theremote object 120. - According to one aspect of the present invention, the
communications channel 106 includes two parts. Afirst channel part 130 is for communicating programmatic data between the proxy/stub pair, and thesecond channel part 132 is for communicating UI data between theclient computer 102 and theremote object 120. Thecommunications channel 106 may be programmable, such as employing a DCE ORPC facility, to facilitate inter-context communication between theremote object 120 and theclient 102. Thechannel 106 also may selectively allocate the channel bandwidth for the UI information (channel part 132) and the programmatic data (channel part 130) being communicated. Thecommunications channel 132, for example, employs a communications protocol, such as the Remote Desktop Protocol (RDP) developed by Microsoft Corporation of Redmond, Washington. The RDP protocol provides for bi-directional communications of UI data between theclient 102 and the remote object at theserver 104 viapart 132 of thecommunications channel 106. For example, thechannel part 132 may further subdivide its communications of UI into separate channels for different types of UI information (e.g., one channel for mouse and keyboard information and another for video communicated back to the client computer). It is to be appreciated that any communications protocol (or a combination of different protocols) may be employed that enables communication of programmatic data in conjunction with the communication of a UI data so that theremote object 120 and associated controls may be manipulated at theclient 102 by code or user interaction with the UI as if the components were installed locally. - With reference to Fig. 2c, the proxy/stub pair employs a well-defined request/response protocol via an associated
communications channel 130 that is transparent to both the caller (thehost 108 at the client 102) and theremote object 120. Thecommunications channel 130 is part of thecommunications channel 106 between theclient 102 and theremote server session 107. By way of example, theproxy object 126 marshalls the call context (e.g., input parameters from the client) of each method and forwards them to thestub 124 as a request message. Thestub object 124 receives the request, unmarshalls the call context, and calls theremote object 120 for executing the request. Any results, exceptions, and/or output parameters are marshalled by thestub 124 and are sent back to theproxy 126 in a response message. Finally, theproxy object 126 takes the response, unmarshalls the return value and any output parameters, and provides them to theclient 102. From the client's perspective, theproxy object 126 looks just like theremote object 120, as the proxy knows the policies of the caller's context. As a result, theclient 102 interacts withproxy object 126 as if it were executing locally in the host application's context. Because theremote object 120 is being called in its context by astub object 124 that knows the policies of the remote object's context, the object also "thinks" theclient 102 has made the call in the remote object's context. - In accordance with the present invention, a UI is generated at the
server 104 for theremote object 120. The UI includes a graphical UI (GUI) and associated programmatic data. The UI information is generated in the context of theremote object 120 and communicated to theclient computer 102 via anotherpart 132 of thecommunications channel 106. Thechannel part 132 also communicates UI instructions, such as based on user interaction at the client, from theclient computer 102 to theremote object 120 via, for example, theremote host 116. - The
client computer 102 includes adisplay 140 in which graphical features and user interfaces associated with programs running locally on the client, including thehost 108, and those of theremote object 120 may be displayed. In addition, the UI information communicated via thesecond channel part 132 may be passed to a window address at theclient 102. As result, both thelocal host 108 and theremote object 120 may share one area of thedisplay 140 at theclient 102 in a real time manner. As a result, the remotely generated UI appears embedded in thelocal host 108 in substantially the same manner as if the remote object were running locally at theclient computer 102. Any changes to theremote object 120 may be stored locally at theclient 102 as a modified version of theobject 110 embedded within thelocal host 108, with the data to be stored at the client being communicated as programmatic data via thechannel 130. - Traditionally, in order for a host computer to manipulate an embedded object, an application (or object) associated with the embedded object may need to be installed locally. In accordance with the present invention, however, script or other controls associated with the
client 102 may be employed to enable interaction with a remote instance of the embedded object as if the application were running locally. Moreover, any compiled code may be utilized to access a remote object provided that the code uses standard interfaces, such as, for example, the IDispatch interface described above. Advantageously, thesystem 100, in accordance with the present invention, also enables the user to interact with theremote object 120 and visually see the results of the interactions even though the application is not running locally. As mentioned above, this is a result of theinteractive communications channel 106, which permits real time bi-directional communication of both programmatic data (marshalled between the host and remote object) and UI information. While for purposes of illustration, thechannel parts channel 106 that employ different protocols, it is to be appreciated that both the programmatic data and the UI information may be merged into a single stream, in which the UI and programmatic data are combined and communicated with the same protocol (e.g., RDP protocol). - Fig. 3 illustrates an example of a distributed
computing environment 200, in which aclient computer 202 is operatively connected to multipleremote servers client computer 202 includes ahost application context 210 having one or more embedded objects (not shown), such as OLE objects or ACTIVEX® controls. In this particular example, at least some of the embedded objects are associated with applications that are not resident on theclient computer 202. Theclient computer 202 is programmed to include a control (e.g., an ACTIVEX® control) that is called into the host application context in response to invoking an object (e.g., by referencing) at the client computer. - By way of example, an object is associated with an HTML document that is in the
execution context 210 at theclient computer 202. A corresponding application for the object resides in theInternet server 206. Theclient 202 is operatively coupled to theInternet server 206 through anetwork 216, such as the World Wide Web viaconventional communications links servers network 216. Theclient computer 202 is connected to thenetwork 216 via the communications link 218, such as by a modem or other appropriate connection device. Accordingly, low-level communications between theremote server 206 and theclient computer 202 may occur in a conventional manner. - Client-
side script 214, for example, may be programmed to call afirst control 226 to create aremote instance 230 of the object at theserver 206 and establish a transparent interactive communications channel between theclient 202 and the remote object. More particularly, in response to invocation of the first object (e.g., by referencing the embedded object), thescript 214 calls thecontrol 226 into its context. Alternatively, thecontrol 226 may automatically be called into context in response to invoking the object, such as being preprogrammed as part of the host computer's operating system. The alternative approach also makes the entire virtualization of theremote object 230 at theclient computer 210 transparent to the controls involved in establishing and maintaining the communications. Thecontrol 226, in turn, exposes a method that sends a request (e.g., including GUID or PROGID of the embedded object) to theremote server 206 requesting creation of aremote object 230. - A proxy/stub pair is dynamically created to marshall requests, response, and other control information between the
client 202 and theremote object 230. A UI for theremote object 230 also is manufactured at theremote server 206 and communicated to theclient 202 by employing an appropriate protocol via an established communications channel implemented within thecommunications path host application 210 and the context of theremote object 230. From the perspective of the host application 210 (and a user of the client computer 202), theremote object 230 appears to be running locally on the client computer as the interfaces provided by thecontrol 226 implement policies corresponding to theremote object 230. As described herein, code and user interactions implemented at theclient computer 202 are communicated as programmatic data via the communications channel between theremote object 230 and the client. The UI of theremote object 230 also may vary in response to the programmatic data received from theclient 202, such as based on client-side scripting and/or user interactions). A graphical portion of the UI transmitted to theclient 202 is provided to adisplay 232 of the client. Accordingly, the remotely generated UI and the host application may share an area of theclient display 232. - The host application 210 (or another object on the client computer 202), for example, has another embedded object associated with an application resident on the
remote server 204. In this situation, theremote server 204 is operatively coupled to theclient computer 202 through a local area network (LAN), indicated schematically at 234. Theclient 202 is connected, for example, to a Terminal Server session on theserver 204. Acontrol 236 is called into thehost application context 210 in response to invocation of the other embedded object. Thecontrol object 236 exposes a method, which sends a request packet to theremote server 204 requesting creation of aninstance 238 of the embedded object according to the attributes of the embedded object. A proxy/stub pair (or another set of suitable interfaces) also is created to marshall programmatic data between theclient 202 and theremote object 238. A UI also is manufactured at theremote server 204 for theremote object 238, which UI varies in response to the programmatic data communicated between the proxy/stub pair. The remotely manufactured UI is communicated from theremote server 204 to theclient 202 by employing an appropriate protocol (e.g., RDP) via the communications channel connecting the remote session at theserver 204 and theclient 202. A graphical portion of the UI is displayed on thedisplay 232, with the display showing variations of theremote object 238 in response to UI and/or programmatic data communicated from theclient 202 to the remote object. Any changes to theremote object 238 may be stored locally at theclient 202 as a modified version of the object embedded within thehost application 210. - In addition to interactive communication with
remote objects system 200 also may employ a conventional mechanism (e.g., COM) to create anobject 240 in anotherexecution context 242 within theclient computer 202 for an object embedded in the host application. Theobject 240 is a conventional COM object, with conventional communication mechanisms being employed to relate information between the execution context of theremote object 240 and thehost application 210. Briefly stated, acontrol 244 is exposed for the embedded object, but instead of thecontrol 244 creating a remote instance of the object across a network communications link in accordance with the present invention, thecontrol 244 creates a remote instance of the object in anotherexecution context 242 of theclient computer 202. A proxy/stub pair also is created to marshall programmatic data betweenexecution contexts display 232 in a conventional manner, as it is created locally at theclient 202. - It is to be appreciated that any of the
objects computing environment 200 may, in accordance with an aspect of the present invention described herein, result in establishing an interactive communications channel (for programmatic data and UI information) between each host application context and a remote instance of the object. As result, there may be a chaining effect, in which multiple remote objects have remote instances of embedded objects operating at various computers in the distributedsystem 200. - By way of example, an email application running locally at the
client computer 202 may, in accordance with the present invention, create anobject 230, such as a word processing document object, which runs in a word processing application on theremote server 206. Theobject 230 may, in turn, contain another object embedded therein, such as a spreadsheet object associated with a spreadsheet application not resident on theremote server 206. If the word processing application at theremote server 206 invokes the spreadsheet application that is not local to the remote server, a remote instance of the spreadsheet may be created in accordance with an aspect of the present invention, such as either at theclient 202 or at another remote server (e.g., theserver 222 or 224). - In order to provide context for the various aspects of the present invention, Fig. 4 and the following discussion are intended to provide a brief, general description of a
suitable computing environment 300 in which the various aspects of the present invention may be implemented. While various aspects of the invention have been described above in the general context of computer-executable instructions of a computer program that runs on a local computer and/or remote computer, those skilled in the art will recognize that the invention also may be implemented in combination with other program modules. Generally, program modules include routines, programs, components, data structures, etc. that perform particular tasks or implement particular abstract data types. Moreover, those skilled in the art will appreciate that the inventive methods may be practiced with other computer system configurations, including single-processor or multiprocessor computer systems, minicomputers, mainframe computers, as well as personal computers, hand-held computing devices, microprocessor-based or programmable consumer electronics, and the like. - With reference to Fig. 4, an exemplary distributed
computer system environment 300 for implementing the various aspects of the invention includes aconventional computer 302, including aprocessing unit 304, asystem memory 306, and asystem bus 308 that couples various system components including the system memory to theprocessing unit 304. Theprocessing unit 304 may be any of various commercially available processors, including but not limited to Intel x86, Pentium and compatible microprocessors from Intel and others, including Cyrix, AMD and Nexgen; Alpha from Digital; MIPS from MIPS Technology, NEC, IDT, Siemens, and others; and the PowerPC from IBM and Motorola. Dual microprocessors and other multi-processor architectures also may be used as theprocessing unit 304. - The
system bus 308 may be any of several types of bus structure including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of conventional bus architectures such as PCI, VESA, Microchannel, ISA, and EISA, to name a few. Thesystem memory 306 includes read only memory (ROM) 310 and random access memory (RAM) 312. A basic input/output system (BIOS), containing the basic routines that help to transfer information between elements within thecomputer 302, such as during start-up, is stored inROM 310. - The
computer 302 also may include, for example, ahard disk drive 314, amagnetic disk drive 316, e.g., to read from or write to aremovable disk 318, and anoptical disk drive 320, e.g., for reading a CD-ROM disk 322 or to read from or write to other optical media. Thehard disk drive 314,magnetic disk drive 316, andoptical disk drive 320 are connected to thesystem bus 308 by a harddisk drive interface 324, a magneticdisk drive interface 326, and anoptical drive interface 328, respectively. The drives and their associated computer-readable media provide nonvolatile storage of data, data structures, computer-executable instructions, etc. for thecomputer 302. Although the description of computer-readable media above refers to a hard disk, a removable magnetic disk and a CD, it should be appreciated by those skilled in the art that other types of media which are readable by a computer, such as magnetic cassettes, flash memory cards, digital video disks, Bernoulli cartridges, and the like, may also be used in theexemplary operating environment 300, and further that any such media may contain computer-executable instructions for performing the methods of the present invention. - A number of program modules may be stored in the drives and
RAM 312, including anoperating system 330, one ormore application programs 332,other program modules 334, andprogram data 336. Theoperating system 330 in the illustrated computer is, for example, the MICROSOFT WINDOWS NT® operating system available from Microsoft Corporation, of Redmond, Washington, although it is to be appreciated that the present invention may be implemented with other operating systems or combinations of operating systems. - A user may enter commands and information into the
computer 302 through one or more user input devices, such as akeyboard 338 and a pointing device (e.g., a mouse 340). Other input devices (not shown) may include a microphone, a joystick, a game pad, a satellite dish, a scanner, or the like. These and other input devices are often connected to theprocessing unit 304 through aserial port interface 342 that is coupled to thesystem bus 308, but may be connected by other interfaces, such as a parallel port, a game port or a universal serial bus (USB). Amonitor 344 or other type of display device is also connected to thesystem bus 308 via an interface, such as avideo adapter 346. In addition to the monitor, a computer typically includes other peripheral output devices (not shown), such as speakers, printers etc. - The
computer 302 operates in a networked environment using logical connections to one or more remote computers, such as aremote computer 348. Theremote computer 348 may be a workstation, a server computer, a router, a peer device or other common network node, and typically includes many or all of the elements described relative to thecomputer 302, although, for purposes of brevity, only amemory storage device 362 is illustrated in Fig. 4. The logical connections depicted in Fig. 4 include a local area network (LAN) 364 and a wide area network (WAN) 366. Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets and the Internet for providing a distributed computing environment. - When used in a LAN networking environment, the
computer 302 is connected to thelocal network 364 through a network interface oradapter 368. When used in a WAN networking environment, thecomputer 302 typically includes amodem 370, or is connected to a communications server on theLAN 364, or has other means for establishing communications over theWAN 366, such as the Internet. Themodem 370, which may be internal or external, is connected to thesystem bus 308 via theserial port interface 342. In a networked environment, program modules or components depicted relative to thecomputer 302, or portions thereof, may be stored in the remotememory storage device 362 at theremote computer 348. It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between thecomputers - In accordance with the practices of persons skilled in the art of computer programming, the present invention has been described with reference to acts and symbolic representations of operations that are performed by a computer, such as the
computer 302 orremote computer 348, unless otherwise indicated. Such acts and operations are sometimes referred to as being computer-executed. It will be appreciated that the acts and symbolically represented operations include the manipulation by theprocessing unit 304 of electrical signals representing data bits which causes a resulting transformation or reduction of the electrical signal representation, and the maintenance of data bits at memory locations in the memory system (including thesystem memory 306,hard drive 314,floppy disks 318, and CD-ROM 322) to thereby reconfigure or otherwise alter the computer system's operation, as well as other processing of signals. In a distributed computing environment, selected portions of the computer executable instructions may, in accordance with an aspect of the present invention, be performed at eithercomputer - According to an aspect of the present invention, processes and program modules are implemented as objects in each
computer - As mentioned above, COM and DCOM are models used for object-oriented programming. COM specifies how objects within a single application or between applications (e.g. client/server applications) interact and communicate by defining a set of standard interfaces. Interfaces are groupings of semantically related functions through which a client application accesses the services of a server application.
- Object Linking and Embedding (OLE), such as OLE Version 2 and ACTIVEX® controls developed by the Microsoft Corporation of Redmond, Washington, is based on COM and allows the creation of objects of different formats that operate on data through defined interfaces, rather than operating on the applications responsible for the data. The object data can be embedded within an object, or linked to it, so that only a link reference to the data is stored in the object.
- In view of the exemplary operating environments shown and described above, a methodology, which may be implemented in accordance with the present invention, will be better appreciated with reference to the flow diagram of Fig. 5. While, for purposes of simplicity of explanation, the methodology of Fig. 5 is shown and described as a series of steps, it is to be understood and appreciated that the present invention is not limited by the order of steps, as some steps may, in accordance with the present invention, occur in different orders and/or concurrently with other steps from that shown and described herein. Moreover, not all illustrated steps may be required to implement a methodology in accordance with the present invention.
- Referring to Fig. 5, the process begins at
step 400 in which a host application (or object) is running in an associated execution context at a client computer. The host application includes an object embedded therein, which is associated with an application or other object, such as a control, not resident on the client computer. The application to which the embedded object is associated is resident at the remote computer. The client computer may be programmed with data (e.g., in system registry) to know the location of a specific object corresponding to the embedded object. Alternatively or additionally, the client may be programmed with appropriate functionality (controls and interfaces) to determine a location of an appropriate application context for creating a remote instance of the embedded object, such as based on its GUID or PROGID associated with the embedded object. - From
step 400, the process proceeds to step 410 in which the embedded object is invoked, such as in response to making a reference to the object (by user interaction or client-side script). The process proceeds to step 420, in which an appropriate control container, such as an ACTIVEX® control container is called into context of the host application. The ACTIVEX® control container provides an environment that can host a remote object. This may be implemented, for example, by a client-side script passing the GUID or PROGID of the object to an appropriate control in response to referencing the embedded object. Fromstep 420, the process proceeds to step 430. - At
step 430, a connection is established between the client and a session at a remote server, such as a Terminal Server session. The connection includes a communications channel that employs an appropriate communications protocol. By way of example, the communications channel includes an ORPC channel facility that encapsulates the details of the cross-process and cross-network transport. The communications channel also may employ an appropriate protocol (e.g., RDP) for facilitating UI features generated in the Terminal Server session to appear locally at the client via the communications channel. It is to be appreciated that the Terminal Server session may exist between the client and the remote server prior to invoking the embedded object. In addition, a common protocol may be employed to communicating both UI and programmatic data between the client and the remote object. - Next, at
step 440, a request is sent to the remote server to create a remote instance of the object. The request also may specify which interface of the remote object is requested. This may be implemented, for example, by the control sending an appropriate request or method call to a remote host application. Atstep 450, in response to the request, the remote host creates the remote object, which, for example, has an associated IDispatch interface through which the instantiated remote object may be accessed. Next, atstep 460, the remote host dynamically creates a stub for the IDispatch interface. Atstep 470, the control at the client dynamically creates a proxy and binds the proxy to the stub. The transparent communications layer provided by the proxy/stub pair in conjunction with the part of the communications channel for remoting UI information, provide an interactive communication channel between the remote object and the client in accordance with an aspect of the present invention (step 480). - With the interactive communications channel in place, the proxy/stub pair provides a transparent communications layer between the context of the remote object and the client. That is, the proxy/stub pair marshalls and unmarshalls programmatic data (step 490) between the client and remote object. By way of example, the proxy is an object that marshalls call context of each method or request from the client and forwards an invocation request to the stub. The stub, in turn, unmarshalls the parameters from the invocation request and executes the call with the remote object in its execution context. The stub further marshalls status information (e.g., return code, exception information, etc.) from the remote object, which information is returned to the client proxy. The client proxy, in turn, unmarshalls the programmatic data from the stub and provides it to the appropriate execution context of the client. The proxy/stub pair enables the communication of programmatic data to occur to the client and remote object as if being performed locally within their respective computers.
- Next, the process proceeds to step 500 in which a determination is made as to whether the unmarshalled parameter(s) is an interface pointer. An interface pointer, for example, corresponds to an instance of another object that is being or has been created. The object associated with the pointer may, in accordance with the present invention, be created at the client computer, the remote computer, or at another computer that is operatively coupled to the host (client or server computer) requesting creation of the object. If the parameter is an interface pointer, the process proceeds to step 510.
- At
step 510, a determination is made as to whether a proxy/stub pair already exists for the interface pointer. If a proxy/stub pair does exist, the process proceeds to step 520. If a proxy stub pair does not exist for the interface pointer, however, a new proxy stub pair is created atstep 530. This may be substantially similar to the methodology described with respect tosteps step 500 is negative, indicating that the parameter is not an interface pointer, the process also proceeds to step 520. - At
step 520, the remote server generates UI information indicative of the condition and/or status of the remote object. The process then proceeds to step 540, in which the remotely generated UI information is communicated to the client via the communications channel. The UI information varies based on the user interactions and code manipulation of the remote object, which is communicated as programmatic data from client proxy and unmarshalled by the stub (step 490). - By way of example, client-side script and/or user interaction at the client, such as with a pointer device (e.g., a mouse) or keyboard, may control and/or modify the condition of the remote object as if the object were local. The client-side interactions are communicated to the remote object as programmatic data via the proxy/stub pair for execution by the remote object, which may (depending on the interactions) effect changes in the UI associated with the remote object. As mentioned above, the UI and programmatic data may be merged into a single, bi-directional data stream that employs a common protocol (e.g., RDP). The UI is modified and, in turn, updated UI information is communicated to the client for implementation as part of the client-side display of the remote object. As a result, the UI displayed locally reflects real-time changes in the UI that occur based on client-side interactions so that the remote object may be manipulated as if it were local on the client computer. In addition, the remote object and the host application may share the same display at the client computer. The remotely generated UI even may be directed to an appropriate window address.
- At
step 550, a determination is made as to whether the client has requested release of the remote object. The release, for example, is based on the value of a reference counter maintained at the client. When the reference counter reaches zero, indicating that no outstanding references exist for the remote object, a release packet is sent to the stub to release the remote object. If this determination (step 550) is negative, the process returns to step 490 to enable interactive communication of both programmatic and UI data between the client and the remote object. - If the determination at
step 550 is affirmative, indicating that a client has sent a release packet to the remote server to release the remote object, the process proceeds to step 560 in which the remote object is released. As a result of removing the remote object from the execution context of the remote session, the proxy/stub pair also is removed from their respective contexts. Fromstep 560, the process proceeds to step 570 in which the process ends. - While the foregoing process has been described as a series of steps for implementing communications channels for both programmatic and UI data, it is to be understood and appreciated that such channels typically are not interdependent. For example, changes in the UI may occur asynchronously over the UI channel (or channels) relative to the looped structure illustrated in the flow diagram of Fig. 5. That is, each of the programmatic and UI data channels may be implemented in parallel to each other, but for simplicity of explanation has been shown and described with respect to a common flow diagram.
- In view of the foregoing, it is to be appreciated that a system or method in accordance with the present invention facilitates management of container applications, as it allows a remote instance of a COM object embedded in a host application to be created and maintained at a remote server (e.g., in a Terminal Server session) for manipulating the remote object. Moreover, load balancing also is facilitated as COM applications may be employed at a few selected servers to enable a multitude of clients to create a plurality of fully interactive remote objects on the selected servers.
- Another benefit of the present invention is that is also permits powerful hybrid applications to be implemented across a network, with the more complex and/or sophisticated programming being resident on one or more remote servers to which the client has access. Each time an embedded object is invoked for which no associated application is resident on the client, a remote instance therefore may be created dynamically at an appropriate server. By way of example, a web page or word processing application may be running locally on a client, but have an embedded object associated with an application not resident on the client. The required application may be a newer version than installed on the client or be an application simply not installed on the client, such as a spreadsheet application or a technical drawing package. In accordance with an aspect of the present invention, invoking the embedded object results in an interactive remote instance of the embedded object to be created remotely at a server to which the client is connected. UI and programmatic data is communicated between the client and the remote instance of the object, thereby enabling full interaction between the client and the remote object as if it were local on the client. Advantageously, from the perspective of the client, the remote object appears to be running locally on the client. Similarly, the remote object "thinks" that the host application that called the application is in the context of the remote object. The client may interact with and manipulate the remote instance of the embedded object, with the UI thereof being provided to the client's display.
- Additionally, because only the object creation mechanism may need to be modified to implement a system in accordance with the present invention, the method is compatible with existing and previously written client and server object-oriented applications, and, therefore, can be used without modifying these existing applications. In addition, object references to objects not resident on a host computer can now be added to network object applications (e.g., in HTML or HTML URLs), greatly enhancing the variety and format of information available to network object applications. Accordingly, developers may quickly and cleanly create distributed client/server object applications, using a known and familiar object-oriented programming environment (e.g., OLE), which decreases development time, and lowers overall development costs.
- What has been described above are examples of the present invention. It is, of course, not possible to describe every conceivable combination of components or methodologies for purposes of describing the present invention, but one of ordinary skill in the art will recognize that many further combinations and permutations of the present invention are possible. Accordingly, the present invention is intended to embrace all such alterations, modifications and variations that fall within the spirit and scope of the appended claims. Furthermore, to the extent that the term "includes" is used in either the detailed description or the claims, such term is intended to be inclusive in a manner similar to the term "comprising."
Claims (53)
- A system comprising:a first computer running a first object having a second object associated with a remote object;wherein, in response to invoking the second object at the first computer, the first computer operatively couples to a second computer running the remote object and virtualizes at the first computer a remote instance of the second object running in the remote object and further virtualizes a user interface related thereto via a dynamically created interface.
- The system of claim 1, wherein the remote object is an application and the user interface is indicative of a condition of the remote instance of the second object running on the second computer.
- The system of claim 2, wherein the remote instance of the second object is a Component Object Model object.
- The system of claim 2, wherein the second object is an Object Linking and Embedding object reference.
- The system of claim 2, wherein the remote object is an Object Linking and Embedding object reference.
- The system of claim 2, wherein a communications channel is created between the remote instance of the second object and the first computer, the communications channel including a first channel part through which programmatic data is communicated between the first computer and the remote instance of the second object, the communications channel including a second channel part through which the user interface is communicated from the remote instance of the second object to the first computer.
- The system of claim 6, wherein the first channel part further includes a proxy object at the first computer and a stub object at the second computer operatively associated with interfaces of the remote instance of the second object, the proxy object and stub object marshalling the programmatic data between the first computer and the remote instance of the second object.
- The system of claim 2, further including a programmatic mechanism at the first computer for specifying criteria indicative of which object to create in response to invoking the second object at the first computer.
- The system of claim 1, further including a control operating at the first computer associated with the first application, the control exposing a method that establishes a communications channel to operatively couple the first computer and the second application in response to invoking the second object.
- The system of claim 9, wherein the control is a Component Object Model object.
- The system of claim 9, wherein the control is an Object Linking and Embedding object.
- The system of claim 1, wherein the first computer is connected to a server session of the second computer, the second application operating in an execution context of the server session.
- A system comprising:a client execution context on a first computer, the client execution context having an object that is associated with a remote host not resident on the first computer;wherein the first computer includes computer executable instructions for dynamically creating a remote instance of the object in the remote host in response to invoking the object at the first computer, the remote host generating a user interface for the remote instance of the object, the user interface being communicated between the first computer and the remote instance of the object via an interactive bi-directional communications channel between the client execution context and the remote host, programmatic data being communicated between the first computer and the remote instance of the object via the communications channel, whereby interactive communications between the client execution context and the remote instance of the object is provided.
- The system of claim 13, wherein the remote instance of the object is a Component Object Model object.
- The system of claim 13, wherein the remote instance of the object is an Object Linking and Embedding object.
- The system of claim 13, wherein the communications channel includes a first channel part through which the programmatic data is communicated between the first computer and the remote instance of the object, the communications channel including a second channel part through which the user interface is communicated between the remote instance of the object and the first computer.
- The system of claim 16, further including a proxy object at the first computer and a stub object at the second computer operatively associated with the remote instance of the object, the proxy object and stub object marshalling the programmatic data between the first computer and the remote instance of the object, thereby enabling bi-directional communications over the first channel part transparent to the client execution context and the remote host.
- The system of claim 13, further including a control operating at the first computer associated with the client application, the control exposing a method that establishes the communications channel to operatively couple the first computer and the remote host in response to referencing the object at the client computer.
- The system of claim 18, wherein the control is a Component Object Model object.
- The system of claim 18, wherein the control is an Object Linking and Embedding object.
- The system of claim 13, wherein the first computer is connected to a server session of the second computer via the communications channel, the remote host and the remote instance of the object operating in the server session.
- The system of claim 13, further including a programmatic mechanism at the first computer for providing to the remote computer a parameter indicative of which object to create in response to invoking the object at the first computer.
- An interactive distributed component object model, comprising:a host object resident on a host computer having an object embedded therein, a remote instance of the embedded object being created in response to invoking the embedded object; anda remote object on a remote computer, the remote object being operative to create the remote instance of the embedded object at the remote computer in response to invoking the embedded object, a user interface for the remote instance of the embedded object being generated at the remote computer;wherein the host computer interactively couples to the remote instance of the embedded object via a dynamically created interface for bi-directional communications of programmatic data and user interface data between the remote instance of the embedded object and the host computer.
- The system of claim 23, wherein the remote instance of the embedded object is a Component Object Model object.
- The system of claim 23, wherein the remote instance of the embedded object is an Object Linking and Embedding object
- The system of claim 23, wherein the embedded object is an Object Linking and Embedding object reference.
- The system of claim 23, wherein the embedded object is a Component Object Model object.
- The system of claim 23, wherein a communications channel is created between the remote instance of the embedded object and the host computer, the communications channel including a first channel part through which the programmatic data is communicated between the host computer and the remote instance of the embedded object, the communications channel including a second channel part through which user interface data is communicated between the remote instance of the embedded object and the host computer.
- The system of claim 28, wherein further including a proxy object associated with the first channel part at the host computer and a stub object associated with the first channel part at the remote computer and operatively associated with the remote instance of the embedded object, the proxy object and stub object marshalling the programmatic data between the host computer and the remote instance of the embedded object.
- The system of claim 23, wherein the host computer is programmed to expose a method in response to invoking the embedded object for establishing a communications channel to interactively couple the host computer and the remote instance of the embedded object.
- The system of claim 30, further including another object at the host computer for exposing the method.
- The system of claim 23, wherein the host computer is connected to a server session of the remote computer, the remote instance of the embedded object operating in an execution context of the server.
- The system of claim 23, further including a programmatic mechanism at the host computer for specifying criteria indicative of which object to create in response to invoking the embedded object at the first computer.
- The system of claim 23, wherein the host computer includes computer-executable instructions for requesting creation of the remote instance of the embedded object in response to invoking the embedded object.
- A computer-readable medium having computer-executable instructions for performing the acts of comprising:running on a first computer a first object having a second object therein associated with a remote object not resident on the first computer;in response to invoking the first object, programmatically interfacing the first object with the remote object on a remote computer to create a remote instance of the second object on the remote computer; andcommunicating user interface and programmatic data between the remote instance of the second object and the first computer.
- The computer-readable medium of claim 35 having further computer-executable instructions for performing the act of creating a communications channel between the remote instance of the second object and the first computer, the communications channel including a first channel part through which the programmatic data is communicated between the first computer and the remote instance of the second object, the communications channel including a second channel part through which the user interface is communicated between the remote instance of the second object and the first computer.
- The computer-readable medium of claim 36 having further computer-executable instructions for performing the act of marshalling the programmatic data between the first computer and the remote instance of the second object over the first channel part, thereby enabling communications over the first channel part which is transparent to the first object and the remote object.
- The computer-readable medium of claim 36 having further computer-executable instructions for performing the act of exposing a control object that establishes the communications channel to interactively couple the first computer and the remote instance of the second object via a dynamically created interface in response to invoking the object.
- The computer-readable medium of claim 35 having further computer-executable instructions for performing the act of specifying criteria indicative of which object to create in response to invoking the second object at the first computer.
- The computer-readable medium of claim 39 having further computer-executable instructions for performing the acts of determining a parameter indicative of which object to create in response to invoking the second object at the first computer and sending the parameter to the remote host to effect creation of the remote instance of the second object.
- The computer-readable medium of claim 35 having computer-executable instructions for performing the act of requesting creation of the remote instance of the second object in response to invoking the second object at the first computer.
- A method for facilitating interactive communications between a client and server in a distributed computing environment, the method comprising:running on the client a host object having an embedded object associated with a second object resident on the server;invoking at the client the embedded object;creating at the server a remote instance of the embedded object in response to invoking the embedded object;creating an interface between the client and the remote instance of the embedded object in response to invoking the embedded object; andcommunicating user interface and programmatic data between the remote instance of the embedded object and the client.
- The method of claim 42, wherein the remote instance of the embedded object varies in response to programmatic and user interface data communicated from the client to the server.
- The method of claim 42, further including creating a bi-directional communications channel between the remote instance of the embedded object and the client for communicating the user interface and programmatic data between the client and the remote instance of the embedded object.
- The method of claim 44, further including communicating programmatic data between the client and the remote instance of the embedded object via a first part of the communications channel , and communicating user interface data between the remote instance of the embedded object and the client via a second part of the communications channel .
- The method of claim 45, further including marshalling the programmatic data between the client and the remote instance of the embedded object over the first channel part, the communications over the first channel part being transparent to the client and the remote instance of the embedded object.
- The method of claim 42, further including exposing a control object for establishing the communications channel to interactively couple the client and the remote instance of the embedded object in response to the step of invoking.
- The method of claim 42, further including specifying which object to create in response to invoking the embedded object.
- The method of claim 48, wherein the step of specifying further includes identifying a parameter indicative of which object to create in response to the step of invoking and sending the parameter to a remote host to effect creation of the remote instance of the embedded object.
- The method of claim 42, further including the step of requesting creation of the remote instance of the object in response to the step of invoking.
- A computer-readable medium having computer-executable instructions for performing the steps set forth in claim 42.
- A system comprising:a first computer running a first object having a second object associated with a remote object;wherein, in response to invoking the second object at the first computer, the first computer transmits a signal to a second computer having the remote object, the first computer virtualizing a remote instance of the second object and a user interface related thereto via a dynamically created interface in response to signals received from the second computer indicative of the remote instance of the second object running in the remote object at the second computer.
- An electronic signal adapted to be transmitted between at least two computers, comprising computer-executable instructions for, in response to invoking a first object operatively associated with a second object running at a first of the at least two computers, creating at a second of the at least two computers a remote object corresponding to the first object, and virtualizing at the first computer a user interface for the remote object via a dynamically created interface between the first and second of the at least two computers.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US59564500A | 2000-06-16 | 2000-06-16 | |
US595645 | 2000-06-16 |
Publications (3)
Publication Number | Publication Date |
---|---|
EP1164482A2 true EP1164482A2 (en) | 2001-12-19 |
EP1164482A3 EP1164482A3 (en) | 2004-06-23 |
EP1164482B1 EP1164482B1 (en) | 2008-10-22 |
Family
ID=24384086
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
EP01109770A Expired - Lifetime EP1164482B1 (en) | 2000-06-16 | 2001-04-20 | System and method for interactive communication between objects in a distributed computing environment |
Country Status (4)
Country | Link |
---|---|
EP (1) | EP1164482B1 (en) |
JP (1) | JP2002041309A (en) |
AT (1) | ATE412214T1 (en) |
DE (1) | DE60136247D1 (en) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SG115639A1 (en) * | 2003-03-26 | 2005-10-28 | Microsoft Corp | Transmitting and receiving messages through a customizable communication channel and programming model |
EP1941381A1 (en) * | 2005-09-09 | 2008-07-09 | Microsoft Corporation | Plug and play device redirection for remote systems |
WO2009143302A1 (en) * | 2008-05-20 | 2009-11-26 | Citrix Systems, Inc | Systems and methods for remoting calls issued to embedded or linked object interfaces |
US7882236B2 (en) | 2005-02-04 | 2011-02-01 | Microsoft Corporation | Communication channel model |
US8924395B2 (en) | 2010-10-06 | 2014-12-30 | Planet Data Solutions | System and method for indexing electronic discovery data |
US9858126B2 (en) | 2010-12-16 | 2018-01-02 | Microsoft Technology Licensing, Llc | Device redirection for remote systems |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8578399B2 (en) * | 2004-07-30 | 2013-11-05 | Microsoft Corporation | Method, system, and apparatus for providing access to workbook models through remote function cells |
US20070050471A1 (en) * | 2005-08-31 | 2007-03-01 | Microsoft Corporation | Portable Remoting Component With A Scaleable Feature Set |
US7818798B2 (en) * | 2006-02-03 | 2010-10-19 | Microsoft Corporation | Software system with controlled access to objects |
US8095936B2 (en) | 2007-01-31 | 2012-01-10 | Halliburton Energy Services, Inc. | Remotely controlling and viewing of software applications |
JP5464038B2 (en) * | 2010-05-12 | 2014-04-09 | 株式会社リコー | Information processing apparatus, image forming apparatus, information processing method, program, and recording medium |
GB2516833A (en) | 2013-07-31 | 2015-02-11 | Ibm | Running software application with dynamic action delegation |
-
2001
- 2001-04-20 AT AT01109770T patent/ATE412214T1/en not_active IP Right Cessation
- 2001-04-20 EP EP01109770A patent/EP1164482B1/en not_active Expired - Lifetime
- 2001-04-20 DE DE60136247T patent/DE60136247D1/en not_active Expired - Lifetime
- 2001-05-10 JP JP2001140560A patent/JP2002041309A/en active Pending
Non-Patent Citations (2)
Title |
---|
DANIEL J ET AL: "ACTIVE COM : AN INTER-WORKING FRAMEWORK FOR CORBA AND DCOM" PROCEEDINGS OF THE INTERNATIONAL SYMPOSIUM ON DISTRIBUTED OBJECTS AND APPLICATIONS, XX, XX, 5 September 1999 (1999-09-05), pages 211-222, XP002150109 * |
FERAY A ET AL: "An object-oriented software bus for supervision systems, based on DCOM" ENTERPRISE DISTRIBUTED OBJECT COMPUTING WORKSHOP, 1998. EDOC '98. PROCEEDINGS. SECOND INTERNATIONAL LA JOLLA, CA, USA 3-5 NOV. 1998, NEW YORK, NY, USA,IEEE, US, 3 November 1998 (1998-11-03), pages 263-273, XP010309724 ISBN: 0-7803-5158-4 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SG115639A1 (en) * | 2003-03-26 | 2005-10-28 | Microsoft Corp | Transmitting and receiving messages through a customizable communication channel and programming model |
US7200676B2 (en) | 2003-03-26 | 2007-04-03 | Microsoft Corporation | Transmitting and receiving messages through a customizable communication channel and programming model |
US7882236B2 (en) | 2005-02-04 | 2011-02-01 | Microsoft Corporation | Communication channel model |
EP1941381A1 (en) * | 2005-09-09 | 2008-07-09 | Microsoft Corporation | Plug and play device redirection for remote systems |
EP1941381A4 (en) * | 2005-09-09 | 2009-12-09 | Microsoft Corp | Plug and play device redirection for remote systems |
US8892758B2 (en) | 2005-09-09 | 2014-11-18 | Microsoft Corporation | Plug and play device redirection for remote systems |
US8918530B2 (en) | 2005-09-09 | 2014-12-23 | Microsoft Corporation | Plug and play device redirection for remote systems |
WO2009143302A1 (en) * | 2008-05-20 | 2009-11-26 | Citrix Systems, Inc | Systems and methods for remoting calls issued to embedded or linked object interfaces |
US8924395B2 (en) | 2010-10-06 | 2014-12-30 | Planet Data Solutions | System and method for indexing electronic discovery data |
US9858126B2 (en) | 2010-12-16 | 2018-01-02 | Microsoft Technology Licensing, Llc | Device redirection for remote systems |
US10331501B2 (en) | 2010-12-16 | 2019-06-25 | Microsoft Technology Licensing, Llc | USB device redirection for remote systems |
Also Published As
Publication number | Publication date |
---|---|
EP1164482B1 (en) | 2008-10-22 |
EP1164482A3 (en) | 2004-06-23 |
DE60136247D1 (en) | 2008-12-04 |
ATE412214T1 (en) | 2008-11-15 |
JP2002041309A (en) | 2002-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6405367B1 (en) | Apparatus and method for increasing the performance of Java programs running on a server | |
US8205213B2 (en) | Method and apparatus for dynamically brokering object messages among object models | |
EP1235150B1 (en) | Apparatus and method for processing servlets | |
US6496865B1 (en) | System and method for providing interpreter applications access to server resources in a distributed network | |
US7069562B2 (en) | Application programming interface for connecting a platform independent plug-in to a web browser | |
KR100260682B1 (en) | A process for running applets over non-ip networks | |
US5958013A (en) | Apparatus, methods and computer program products for conducting a persistent session with a host-based application | |
US5926636A (en) | Remote procedural call component management method for a heterogeneous computer network | |
US6453362B1 (en) | Systems, methods and computer program products for invoking server applications using tickets registered in client-side remote object registries | |
US7000238B2 (en) | Development system providing extensible remoting architecture | |
US5999972A (en) | System, method and article of manufacture for a distributed computer system framework | |
EP0657047B1 (en) | Method and system for implementing remote procedure calls in a distributed computer system | |
US5737607A (en) | Method and apparatus for allowing generic stubs to marshal and unmarshal data in object reference specific data formats | |
US6874020B1 (en) | System uses application manager and master agent to communicate with mini-agents for remotely managing application resources distributed across multiple Java virtual machines | |
EP0817022A2 (en) | Method and apparatus for marshalling and unmarshalling argument object references | |
EP1164482B1 (en) | System and method for interactive communication between objects in a distributed computing environment | |
US7197712B2 (en) | Server visualization and control | |
US7823169B1 (en) | Performing operations by a first functionality within a second functionality in a same or in a different programming language | |
KR20040032876A (en) | Inbound connector | |
Madukkarumukumana et al. | Harnessing user-level networking architectures for distributed object computing over high-speed networks | |
Schmidt | Systems programming with C++ wrappers | |
Bettini et al. | A software framework for rapid prototyping of run-time systems for mobile calculi | |
CN113176957B (en) | Remote application automation system based on RPC | |
Jia et al. | Distributed Network Systems: Case Studies | |
GIOP | OMG’s CORBA |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PUAI | Public reference made under article 153(3) epc to a published international application that has entered the european phase |
Free format text: ORIGINAL CODE: 0009012 |
|
AK | Designated contracting states |
Kind code of ref document: A2 Designated state(s): AT BE CH CY DE DK ES FI FR GB GR IE IT LI LU MC NL PT SE TR |
|
AX | Request for extension of the european patent |
Free format text: AL;LT;LV;MK;RO;SI |
|
PUAL | Search report despatched |
Free format text: ORIGINAL CODE: 0009013 |
|
AK | Designated contracting states |
Kind code of ref document: A3 Designated state(s): AT BE CH CY DE DK ES FI FR GB GR IE IT LI LU MC NL PT SE TR |
|
AX | Request for extension of the european patent |
Extension state: AL LT LV MK RO SI |
|
17P | Request for examination filed |
Effective date: 20041029 |
|
17Q | First examination report despatched |
Effective date: 20041130 |
|
AKX | Designation fees paid |
Designated state(s): AT BE CH CY DE DK ES FI FR GB GR IE IT LI LU MC NL PT SE TR |
|
17Q | First examination report despatched |
Effective date: 20041130 |
|
GRAP | Despatch of communication of intention to grant a patent |
Free format text: ORIGINAL CODE: EPIDOSNIGR1 |
|
GRAS | Grant fee paid |
Free format text: ORIGINAL CODE: EPIDOSNIGR3 |
|
GRAA | (expected) grant |
Free format text: ORIGINAL CODE: 0009210 |
|
AK | Designated contracting states |
Kind code of ref document: B1 Designated state(s): AT BE CH CY DE DK ES FI FR GB GR IE IT LI LU MC NL PT SE TR |
|
REG | Reference to a national code |
Ref country code: GB Ref legal event code: FG4D |
|
REG | Reference to a national code |
Ref country code: CH Ref legal event code: EP |
|
REG | Reference to a national code |
Ref country code: IE Ref legal event code: FG4D |
|
REF | Corresponds to: |
Ref document number: 60136247 Country of ref document: DE Date of ref document: 20081204 Kind code of ref document: P |
|
NLV1 | Nl: lapsed or annulled due to failure to fulfill the requirements of art. 29p and 29m of the patents act | ||
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: ES Free format text: LAPSE BECAUSE OF FAILURE TO SUBMIT A TRANSLATION OF THE DESCRIPTION OR TO PAY THE FEE WITHIN THE PRESCRIBED TIME-LIMIT Effective date: 20090202 Ref country code: AT Free format text: LAPSE BECAUSE OF FAILURE TO SUBMIT A TRANSLATION OF THE DESCRIPTION OR TO PAY THE FEE WITHIN THE PRESCRIBED TIME-LIMIT Effective date: 20081022 |
|
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: PT Free format text: LAPSE BECAUSE OF FAILURE TO SUBMIT A TRANSLATION OF THE DESCRIPTION OR TO PAY THE FEE WITHIN THE PRESCRIBED TIME-LIMIT Effective date: 20090323 Ref country code: NL Free format text: LAPSE BECAUSE OF FAILURE TO SUBMIT A TRANSLATION OF THE DESCRIPTION OR TO PAY THE FEE WITHIN THE PRESCRIBED TIME-LIMIT Effective date: 20081022 Ref country code: FI Free format text: LAPSE BECAUSE OF FAILURE TO SUBMIT A TRANSLATION OF THE DESCRIPTION OR TO PAY THE FEE WITHIN THE PRESCRIBED TIME-LIMIT Effective date: 20081022 |
|
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: BE Free format text: LAPSE BECAUSE OF FAILURE TO SUBMIT A TRANSLATION OF THE DESCRIPTION OR TO PAY THE FEE WITHIN THE PRESCRIBED TIME-LIMIT Effective date: 20081022 Ref country code: DK Free format text: LAPSE BECAUSE OF FAILURE TO SUBMIT A TRANSLATION OF THE DESCRIPTION OR TO PAY THE FEE WITHIN THE PRESCRIBED TIME-LIMIT Effective date: 20081022 |
|
PLBE | No opposition filed within time limit |
Free format text: ORIGINAL CODE: 0009261 |
|
STAA | Information on the status of an ep patent application or granted ep patent |
Free format text: STATUS: NO OPPOSITION FILED WITHIN TIME LIMIT |
|
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: SE Free format text: LAPSE BECAUSE OF FAILURE TO SUBMIT A TRANSLATION OF THE DESCRIPTION OR TO PAY THE FEE WITHIN THE PRESCRIBED TIME-LIMIT Effective date: 20090122 |
|
26N | No opposition filed |
Effective date: 20090723 |
|
REG | Reference to a national code |
Ref country code: CH Ref legal event code: PL |
|
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: LI Free format text: LAPSE BECAUSE OF NON-PAYMENT OF DUE FEES Effective date: 20090430 Ref country code: CH Free format text: LAPSE BECAUSE OF NON-PAYMENT OF DUE FEES Effective date: 20090430 |
|
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: MC Free format text: LAPSE BECAUSE OF NON-PAYMENT OF DUE FEES Effective date: 20090430 Ref country code: IE Free format text: LAPSE BECAUSE OF NON-PAYMENT OF DUE FEES Effective date: 20090420 |
|
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: GR Free format text: LAPSE BECAUSE OF FAILURE TO SUBMIT A TRANSLATION OF THE DESCRIPTION OR TO PAY THE FEE WITHIN THE PRESCRIBED TIME-LIMIT Effective date: 20090123 |
|
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: LU Free format text: LAPSE BECAUSE OF NON-PAYMENT OF DUE FEES Effective date: 20090420 |
|
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: TR Free format text: LAPSE BECAUSE OF FAILURE TO SUBMIT A TRANSLATION OF THE DESCRIPTION OR TO PAY THE FEE WITHIN THE PRESCRIBED TIME-LIMIT Effective date: 20081022 |
|
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: CY Free format text: LAPSE BECAUSE OF FAILURE TO SUBMIT A TRANSLATION OF THE DESCRIPTION OR TO PAY THE FEE WITHIN THE PRESCRIBED TIME-LIMIT Effective date: 20081022 |
|
REG | Reference to a national code |
Ref country code: DE Ref legal event code: R082 Ref document number: 60136247 Country of ref document: DE Representative=s name: GRUENECKER, KINKELDEY, STOCKMAIR & SCHWANHAEUS, DE |
|
REG | Reference to a national code |
Ref country code: GB Ref legal event code: 732E Free format text: REGISTERED BETWEEN 20150108 AND 20150114 |
|
REG | Reference to a national code |
Ref country code: DE Ref legal event code: R082 Ref document number: 60136247 Country of ref document: DE Representative=s name: GRUENECKER PATENT- UND RECHTSANWAELTE PARTG MB, DE Effective date: 20150126 Ref country code: DE Ref legal event code: R081 Ref document number: 60136247 Country of ref document: DE Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC, REDMOND, US Free format text: FORMER OWNER: MICROSOFT CORP., REDMOND, WASH., US Effective date: 20150126 |
|
REG | Reference to a national code |
Ref country code: FR Ref legal event code: TP Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC, US Effective date: 20150724 |
|
REG | Reference to a national code |
Ref country code: FR Ref legal event code: PLFP Year of fee payment: 16 |
|
REG | Reference to a national code |
Ref country code: FR Ref legal event code: PLFP Year of fee payment: 17 |
|
PGFP | Annual fee paid to national office [announced via postgrant information from national office to epo] |
Ref country code: FR Payment date: 20170313 Year of fee payment: 17 |
|
PGFP | Annual fee paid to national office [announced via postgrant information from national office to epo] |
Ref country code: GB Payment date: 20170419 Year of fee payment: 17 |
|
PGFP | Annual fee paid to national office [announced via postgrant information from national office to epo] |
Ref country code: IT Payment date: 20170420 Year of fee payment: 17 |
|
PGFP | Annual fee paid to national office [announced via postgrant information from national office to epo] |
Ref country code: DE Payment date: 20180410 Year of fee payment: 18 |
|
GBPC | Gb: european patent ceased through non-payment of renewal fee |
Effective date: 20180420 |
|
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: GB Free format text: LAPSE BECAUSE OF NON-PAYMENT OF DUE FEES Effective date: 20180420 |
|
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: FR Free format text: LAPSE BECAUSE OF NON-PAYMENT OF DUE FEES Effective date: 20180430 Ref country code: IT Free format text: LAPSE BECAUSE OF NON-PAYMENT OF DUE FEES Effective date: 20180420 |
|
REG | Reference to a national code |
Ref country code: DE Ref legal event code: R119 Ref document number: 60136247 Country of ref document: DE |
|
PG25 | Lapsed in a contracting state [announced via postgrant information from national office to epo] |
Ref country code: DE Free format text: LAPSE BECAUSE OF NON-PAYMENT OF DUE FEES Effective date: 20191101 |