原文:
1、动态创建MXD
private bool CreateMxd(string MxdPath, string MxdName) { IMapDocument pMapDocument = CreateObject("esriCarto.MapDocument") as IMapDocument; if (MxdPath.Substring(MxdPath.Length - 1) != @"\") MxdPath += @"\"; pMapDocument.New(MxdPath + MxdName + ".mxd"); AddLayerToMxd(pMapDocument, MxdName); if (pMapDocument == null) return false; if (pMapDocument.get_IsReadOnly(MxdPath + MxdName + ".mxd") == true) { return false; } pMapDocument.Save(true, false); return true; }2、动态创建地图服务
private bool CreateServices(string MapPath, string ServerName) { //IGISServerConnection pGISServerConnection; //pGISServerConnection = new GISServerConnectionClass(); //pGISServerConnection.Connect(HostName); ESRI.ArcGIS.ADF.Identity identity = new ESRI.ArcGIS.ADF.Identity(MapServerUserName, MapserverPass, ""); ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsConnection = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection(HostName, identity); agsConnection.Connect(); IServerObjectAdmin pServerObjectAdmin; pServerObjectAdmin = agsConnection.ServerObjectAdmin; IServerObjectConfiguration2 configuration = (IServerObjectConfiguration2)pServerObjectAdmin.CreateConfiguration(); configuration.Name = ServerName;//发布Service的名称,必填 configuration.TypeName = "MapServer";//发布服务的类型,如:MapServer,GeocodeServer IPropertySet props = configuration.Properties; props.SetProperty("FilePath", MapPath);//设置MXD的路径 #region 一下的property并非必须,只要一个filepath就可以发布 props.SetProperty("OutputDir", "c:\\arcgisserver\\arcgisoutput");//图片的输出目录 props.SetProperty("VirtualOutPutDir", "http://" + HostName + "/arcgisoutput");//图片输出的虚拟路径 props.SetProperty("SupportedImageReturnTypes", "URL");//支持的图片类型 props.SetProperty("MaxImageHeight", "2048");//图片的最大高度 props.SetProperty("MaxRecordCount", "500");//返回记录的最大条数 props.SetProperty("MaxBufferCount", "100");//缓冲区分析的最大数目 props.SetProperty("MaxImageWidth", "2048");//图片的最大宽度 props.SetProperty("IsCached", "false");//是否切片 props.SetProperty("CacheOnDemand", "false");//是否主动切片 props.SetProperty("IgnoreCache", "false");//是否忽略切片 props.SetProperty("ClientCachingAllowed", "true");//是否允许客户端缓冲 props.SetProperty("CacheDir", "c:\\arcgisserver\\arcgiscache\\NewService");//切片的输出路径 props.SetProperty("SOMCacheDir", "c:\\arcgisserver\\arcgiscache");//som的切片输出路径 //configuration.Description = "NewService";//Service的描述 configuration.IsolationLevel = esriServerIsolationLevel.esriServerIsolationHigh;//或者esriServerIsolationLow,esriServerIsolationAny configuration.IsPooled = true;//是否池化 configuration.MaxInstances = 2;//最多的实例数 configuration.MinInstances = 1;//最少的实例数 设置刷新 IPropertySet recycleProp = configuration.RecycleProperties; recycleProp.SetProperty("StartTime", "00:00");//刷新开始时间 recycleProp.SetProperty("Interval", "3600");//刷新间隔 设置是否开启REST服务 IPropertySet infoProp = configuration.Info; infoProp.SetProperty("WebEnabled", "true");//是否提供REST服务 infoProp.SetProperty("WebCapabilities", "Map,Query,Data");//提供何种服务 //configuration.StartupType = esriStartupType.esriSTAutomatic;//或者esriSTManual //configuration.UsageTimeout = 120;//客户端占用一个服务的最长时间 //configuration.WaitTimeout = 120;//客户端申请一个服务的最长等待时间 #endregion //添加服务到Server pServerObjectAdmin.AddConfiguration(configuration); //启动服务 pServerObjectAdmin.StartConfiguration(ServerName, "MapServer"); return true; }3. 动态创建影像服务
private bool CreateServices(string ImagePath, string ServerName) { ESRI.ArcGIS.ADF.Identity identity = new ESRI.ArcGIS.ADF.Identity(MapServerUserName, MapserverPass, ""); ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsConnection = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection(HostName, identity); agsConnection.Connect(); IServerObjectAdmin pServerObjectAdmin; pServerObjectAdmin = agsConnection.ServerObjectAdmin; IServerObjectConfiguration2 configuration = (IServerObjectConfiguration2)pServerObjectAdmin.CreateConfiguration(); configuration.Name = ServerName;//发布Service的名称,必填 configuration.TypeName = "ImageServer";//发布服务的类型,如:MapServer,GeocodeServer IPropertySet propertySet = configuration.Properties; propertySet.SetProperty("Path", ImagePath);//设置Image的路径 propertySet.SetProperty("Start", "00:00"); propertySet.SetProperty("Interval", "24"); propertySet.SetProperty("SupportedImageReturnTypes", "URL"); propertySet.SetProperty("OutputDir", "c:\\arcgisserver\\arcgisoutput");//图片的输出目录 propertySet.SetProperty("VirtualOutPutDir", "http://" + HostName + "/arcgisoutput");//图片输出的虚拟路径 //propertySet.SetProperty("MaxImageHeight", 4100);//4100 // propertySet.SetProperty("MaxImageWidth", 15000);//15000 //propertySet.SetProperty("AllowedCompressions", "None,JPEG,LZ77");//"None,JPEG,LZ77" //propertySet.SetProperty("DefaultResamplingMethod", 0);//0 //propertySet.SetProperty("DefaultCompressionQuality", 75);//75 //propertySet.SetProperty("MaxRecordCount", 500);//500 //propertySet.SetProperty("MaxMosaicImageCount", 1);//20 //propertySet.SetProperty("MaxDownloadImageCount", 20);//20 //propertySet.SetProperty("AllowedFields","Name,MinPS,MaxPS,LowPS,HighPS,CenterX,CenterY");//"Name,MinPS,MaxPS,LowPS,HighPS,CenterX,CenterY" //propertySet.SetProperty("AllowedMosaicMethods","Center,NorthWest,LockRaster,ByAttribute,Nadir,Viewpoint,Seamline");//"Center,NorthWest,LockRaster,ByAttribute,Nadir,Viewpoint,Seamline" //propertySet.SetProperty("AllowedItemMetadata", "Full");//"Full" //ImageServiceInfo pImageSerivce = new ImageServiceInfo(); configuration.StartupType = esriStartupType.esriSTAutomatic; configuration.MinInstances = 1; configuration.MaxInstances = 2; configuration.IsPooled = true; configuration.Info.SetProperty("WebEnabled", "true"); configuration.Info.SetProperty("WebCapabilities", "Image,Catalog,Metadata,Download,Pixels"); pServerObjectAdmin.AddConfiguration(configuration); //启动服务 pServerObjectAdmin.StartConfiguration(ServerName, "ImageServer"); return true; }
3、相关方法
private IServerContext CreateServerContext(string ServerName, string UserName, string PassWord) { ESRI.ArcGIS.ADF.Identity identity = new ESRI.ArcGIS.ADF.Identity(UserName, PassWord, ""); ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsConnection = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection(ServerName, identity); agsConnection.Connect(); if (agsConnection.IsConnected) { try { IServerObjectManager som = agsConnection.ServerObjectManager; IServerContext pServerContext = som.CreateServerContext("Geometry", "GeometryServer"); return pServerContext; } catch (Exception e) { return null; } } return null; } #region ServerContext CreateObject函数 private object CreateObject(string ObjectCLSID) { IServerContext pServerContext = CreateServerContext(HostName,MapServerUserName,MapserverPass); if (pServerContext == null) return null; try { return pServerContext.CreateObject(ObjectCLSID); } catch { return null; } finally { pServerContext.ReleaseContext(); } }