Uno dei maggiori problemi, quando si fanno elaborazioni con un geodatabase tramite webservice, è la richiesta di connessione al workspace.
Ad ogni accesso tramite il webservice abbiamo un costo fisso dovuto alla creazione della connessione al workspace. Questo problema inoltre porta ad avere, in termini di scalabilità, un impatto negativo.
Un modo per ovviare a ciò è crearsi una pooled workspace connection. In sostanza, ci creiamo un servizio di tipo GeodataServer pooled. Quando le istanze del servizio vengono inizializzate creano la connessione al geodatabase. Il nostro servizio web utilizza questa connessione già pronta evitando il costo fisso descritto precedentemente. Inoltre, quando il nostro servizio web rilascia il server context tramite il metodo ReleaseContext(), il server object sarà a disposizione per altre chiamate dal web services perchè abbiamo impostato il servizio a pooled e quindi non verranno distrutte.
Esempio:
[WebMethod] public string
PooledWSExample()
{
// connect to the GIS server
string m_host = "localhost";
ESRI.ArcGIS.ADF.Identity agsID = new ESRI.ArcGIS.ADF.Identity("user", "passwd", "domain");
ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection connection = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection(m_host, agsID, true);
// get a server context
IServerObjectManager som = connection.ServerObjectManager;
IServerContext sc = som.CreateServerContext("MyGDBServer","GeodataServer");
// get the workspace from the GeodataServer
IGeoDataServer gds = sc.ServerObject as IGeoDataServer;
IGeoDataServerObjects gdo = gds as IGeoDataServerObjects;
IWorkspace ws = gdo.DefaultWorkingWorkspace;
// do something with the workspace
sc.ReleaseContext();
return "Operation complete";
}
giovedì 21 maggio 2009
Pooled Workspace Connection
Etichette:
arcgis server,
c#,
web service pooled
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento