URLs, Namespaces, and Monikers
A version of this page is also available for
4/8/2010
A URL follows the syntax described in RFC 1738. This specifies a protocol scheme followed by a scheme-specific portion (<scheme><scheme-specific portion>). For example, in the URL https://www.microsoft.com/, http is the scheme and //www.microsoft.com/ is the scheme-specific portion.
The beginning of the scheme-specific section of the URL contains the server name. This section of the URL is frequently known as the URL namespace.
A moniker is a COM object that identifies an object and provides services to allow other components to obtain a pointer to that object. There are two ways of viewing the use of monikers: as a moniker client, which is a component that uses a moniker to get a pointer to another object, and as a moniker provider. This is a component that supplies monikers identifying its objects to moniker clients.
COM uses monikers to connect to, and activate, objects, whether they are in the same machine or over a network. For example COM uses monikers to establish a network connection. They are also used to identify, connect to, and run OLE compound document link objects. In this case, the link source acts as the moniker provider and the container holding the link object acts as the moniker client.
The COM moniker architecture also provides a convenient programming model for working with URLs. The moniker architecture supports extensible and complete name parsing through the MkParseDisplayNameEx function and the IParseDisplayName and IMoniker interfaces, and printable names through the IMoniker::GetDisplayName method. Because URLs frequently refer to resources across high-latency networks, binding a moniker to a URL synchronously affects performance because the process has to wait for responses from the network before completing the binding. Therefore, the URL moniker class supports asynchronous in addition to synchronous binding.