This document is archived and information here might be outdated. Recommended version. |
A Globe Server class that serves Globe Tiles.
The GlobeServer component provides programmatic access to the contents of a Globe document on disk, and serves globe data tiles of the layers in the 3dd document. GlobeServer is an efficient means of serving globe optimized data for web service access by globe clients.
Interfaces | Description |
---|---|
IGlobeServer | Provides access to members that support Globe server operations. |
IGlobeServer2 | Provides access to the objects used by the Globe server. |
IGlobeServer3 | Provides access to the objects used by the Globe server. |
IGlobeServer4 | Provides access to the objects used by the Globe server. |
IGlobeServerObjects | Provides access to the objects used by the Globe server. |
IGlobeServerSetup | Provides access to members for initializing a Globe server. |
ILogSupport (esriSystem) | Provides access to methods for initializing an object for logging. |
IObjectActivate (esriSystem) | Provides access to methods for activating and deactivating objects. |
IObjectConstruct (esriSystem) | Provides access to methods for constructing an object. |
IRequestHandler (esriSystem) | Provides access to members that control handing of request messages. |
IRequestHandler2 (esriSystem) | Provides access to members that control handing of request messages. |
IRESTRequestHandler (esriSystem) | Provides access to REST request for SO or SOE. |
IServerObject (esriServer) | Provides access to properties of a map or geocode server object. |
IServerObjectExtensionManager (esriServer) | Provides access to members that help locate installed server object extensions. |
The GlobeServer coclass gives you access to an ArcGIS Globe layer bound to a GlobeServer object. It also allows GlobeServer layers to be queried and identified (via the Find and Identify methods). GlobeServer can be used in desktop or Internet development environments. In a desktop environment, GlobeServer objects can be created in-process within your application. GlobeServer objects are run within ArcGIS for Server.
ArcGIS for Desktop and ArcGIS Engine developers can also consume GlobeServer objects via the Server API. The GlobeServer object always works in a stateless manner. That means, unlike MapServer objects, GlobeServer objects are always exposed as pooled objects, and you can only use them to gain access to finer grained ArcObjects. Note that you will not be able to make permanent changes, as a non-pooled mode of operation is not supported by the GlobeServer objects.
Use GISServerConnection to connect to the GIS server.
The GlobeServer coclass contains several interfaces with basic functions for displaying (IGlobeServer) and querying (IGlobeServer, IGlobeServerObjects, and IGlobeServerSetup) a Globe layer.
//pass the URL address eg. http://myGlobeServer:6800/arcgis/services
private IAGSServerConnection ConnectToServer(string ServerConnection
{
//Create the ArcGIS connection...
IAGSServerConnectionName pAGSServerConnectionName = new AGSServerConnectionNameClass();
//populate IpropertySet2<
IPropertySet2 pProps = new PropertySetClass();
if (ServerConnection.StartsWith("http://myGlobeServer:6080/"))
pProps.SetProperty("URL", ServerConnection);
else
{
MessageBox.Show("not a valid server connection");
return;
}
//set propeties and return object
pAGSServerConnectionName.ConnectionProperties = pProps;
IName pName;
pName = (IName)pAGSServerConnectionName;
return (IAGSServerConnection)pName.Open();
}
static HRESULT GetServerObject(BSTR serverName, BSTR serverObjectName, IGlobeServer** ppGlobeServer)
{
HRESULT hr;
// creates a local globe server object
if (wcsstr(serverName, L".3dd"))
{
IGlobeServerPtr ipGlobeServer(CLSID_GlobeServer);
if (FAILED(hr = IGlobeServerSetupPtr(ipGlobeServer)->Init(serverName)))
return hr;
(*ppGlobeServer) = ipGlobeServer;
(*ppGlobeServer)->AddRef();
return S_OK;
}
IPropertySetPtr ipConnProps(CLSID_PropertySet);
if (wcsstr(serverName, L"http://myGlobeServer:6080/"))
{
ipConnProps->SetProperty(BString(L"CONNECTIONTYPE"),
Variant((long)esriAGSConnectionTypeInternet));
ipConnProps->SetProperty(BString(L"URL"), Variant(serverName));
}
else
{
return E_FAIL;
}
&NBSP;
ipConnProps->SetProperty(BString(L"USER"), Variant(L""));
ipConnProps->SetProperty(BString(L"PASSWORD"), Variant(L""));
ipConnProps->SetProperty(BString(L"HIDEUSERPROPERTY"), Variant(VARIANT_TRUE, VT_BOOL));
IAGSServerConnectionNamePtr ipAGSServerConnName(CLSID_AGSServerConnectionName);
ipAGSServerConnName->put_ConnectionProperties(ipConnProps);
IUnknownPtr ipUnk;
if (FAILED(hr = INamePtr(ipAGSServerConnName)->Open(&ipUnk)))
return hr;
IAGSServerConnectionPtr ipAGSServerConn(ipUnk);
IAGSEnumServerObjectNamePtr ipNames;
if (FAILED(hr = ipAGSServerConn->get_ServerObjectNames(&ipNames)))
return hr;
IAGSServerObjectNamePtr ipName;
while (ipNames->Next(&ipName) == S_OK)
{
BString name;
ipName->get_Name(&name);
if (wcscmp(name, serverObjectName) == 0)
{
if (FAILED(hr = INamePtr(ipName)->Open(&ipUnk)))
return hr;
return ipUnk->SafeQI(IGlobeServer, ppGlobeServer);
}
}
return E_FAIL;
}