本地串連可以使用Dcom代理,而本質上DCOM代理是利用AO對象和ArcGIS Server 伺服器對象打交道。所以本地串連,用戶端就要有AO對象,當然也可以直接利用AO API(可以認為是遠端伺服器對象的AO代理),而不使用Dcom代理,(但是使用Dcom代理,因為代理和值對象是在用戶端,所以要比AO快(AO proxies的所有操作都是在遠程調用的基礎上完成的,但是利用AO我們可以訪問到遠端的細粒度的AO對象)),而代理屬於Soap的範疇,而擷取Dcom代理,目前我發現兩種方法,如下:
ESRI.ArcGIS.ADF.Identity id = new ESRI.ArcGIS.ADF.Identity(username, password, domain);
ESRI.ArcGIS.ADF.ArcGISServer.MapServerDcomProxy mapserver_dcom =
(MapServerDcomProxy) MapServerDcomProxy.Create(SOMname, servicename, id);
// do something with the DCOM proxy
mapserver_dcom.Dispose();
|
ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection connection = null;
ESRI.ArcGIS.Server.IServerContext serverContext = null;
try
{
connection = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection();
connection.Host = "localhost";
connection.Connect();
ESRI.ArcGIS.Server.IServerObjectManager serverObjectManager = connection.ServerObjectManager;
serverContext = serverObjectManager.CreateServerContext("MyMapService", "MapServer");
ESRI.ArcGIS.ADF.ArcGISServer.MapServerDcomProxy mapservice = new
ESRI.ArcGIS.ADF.ArcGISServer.MapServerDcomProxy(serverContext, true);
ESRI.ArcGIS.ADF.ArcGISServer.MapServerInfo mapinfo = mapservice.GetServerInfo(mapservice.GetDefaultMapName());
ESRI.ArcGIS.ADF.ArcGISServer.MapDescription mapdesc = mapinfo.DefaultMapDescription;
ESRI.ArcGIS.ADF.ArcGISServer.ImageType imgtype = new ESRI.ArcGIS.ADF.ArcGISServer.ImageType();
imgtype.ImageFormat = ESRI.ArcGIS.ADF.ArcGISServer.esriImageFormat.esriImagePNG;
imgtype.ImageReturnType = ESRI.ArcGIS.ADF.ArcGISServer.esriImageReturnType.esriImageReturnURL;
ESRI.ArcGIS.ADF.ArcGISServer.ImageDisplay imgdisp =
new ESRI.ArcGIS.ADF.ArcGISServer.ImageDisplay();
imgdisp.ImageHeight = 500;
imgdisp.ImageWidth = 500;
imgdisp.ImageDPI = 96;
ESRI.ArcGIS.ADF.ArcGISServer.ImageDescription imgdesc =
new ESRI.ArcGIS.ADF.ArcGISServer.ImageDescription();
imgdesc.ImageDisplay = imgdisp;
imgdesc.ImageType = imgtype;
ESRI.ArcGIS.ADF.ArcGISServer.MapImage mapimg = mapservice.ExportMapImage(mapdesc, imgdesc);
System.Net.HttpWebRequest webreq = System.Net.WebRequest.Create(mapimg.ImageURL) as HttpWebRequest;
System.Net.HttpWebResponse webresp = webreq.GetResponse() as HttpWebResponse;
System.Drawing.Image img = System.Drawing.Image.FromStream(webresp.GetResponseStream());
}
catch (Exception ex){}
finally
{
serverContext.ReleaseContext();
connection.Dispose();
} |