arcgis server 开发几个例子

1、获得admin权限

当连接上ArcGIS Server,我们获取了IAGSServerConnectionAdmin,通过该对象我们获取了IServerObjectAdmin,通过该对象可以对Server进行管理

public  IServerObjectAdmin ConnectAGS(string host, string username, string password)
        {
            try
            {
                IPropertySet propertySet = new PropertySetClass();
                propertySet.SetProperty("url", host);
                propertySet.SetProperty("ConnectionMode", esriAGSConnectionMode.esriAGSConnectionModeAdmin);
                propertySet.SetProperty("ServerType", esriAGSServerType.esriAGSServerTypeDiscovery);
                propertySet.SetProperty("user", username);
                propertySet.SetProperty("password", password);
                propertySet.SetProperty("ALLOWINSECURETOKENURL", true); //设置为false会弹出一个警告对话框

                IAGSServerConnectionName3 pConnectName = new AGSServerConnectionNameClass() as IAGSServerConnectionName3;//10.1新增接口
                pConnectName.ConnectionProperties = propertySet;

                IAGSServerConnectionAdmin pAGSAdmin = ((IName)pConnectName).Open() as IAGSServerConnectionAdmin;

                token = GenerateAGSToken_RESTAdmin(host, "arcgis", "arcgis");
               
                return pAGSAdmin.ServerObjectAdmin;
            }
            catch (Exception exc)
            {
                Console.WriteLine("连接失败: {0}. Message: {1}", host, exc.Message);
                return null ;
            }
        }

ConnectAGS("http://192.168.110.136:6080/arcgis/admin", "arcgis", "arcgis");

当获得了IAGSServerConnectionAdmin 这个接口我们进而可以获取IServerObjectAdmin,IServerObjectAdmin接口,
在帮助中看到了IDiscoveryServerObjectAdmin接口

2、 更改实例数

   private void ChangInstance(IServerObjectAdmin pSAdmin, IServerObjectConfiguration pConf, int pMin, int pMax)
        {
            IEnumServerObjectConfiguration pEnServerConf = pSAdmin.GetConfigurations();

            IServerObjectConfiguration pSConf = pEnServerConf.Next();

            IServerObjectConfiguration pSOConfig = null;

            while (pSConf != null)
            {
                if (pSConf.Name == pConf.Name && pSConf.TypeName == pConf.TypeName)
                {
                    pSOConfig = pSConf;
                    break;
                }

                pSConf = pEnServerConf.Next();
            }

            if (pSConf != null)
            {
                pSConf.MinInstances = pMin;
                pSOConfig.MaxInstances = pMax;
                pSAdmin.UpdateConfiguration(pSOConfig);
            }

        }

3、 停止服务

pServerAdmin.StopConfiguration("Flow", "MapServer");
 

4 、删除服务

   pServerAdmin.DeleteConfiguration("BusSimulation/DataPrep", "MapServer");//如果自己建立了目录请按照这种方式写,不然出错

5、 REST方式操作

ArcGIS 10.1 for Server可以通过http请求的方式访问,server接到请求后,然后响应,响应的结果是json格式的,对json格式我们可以自己去解析,但是这个很麻烦,在10.1中增加了很多对json格式处理的接口IJSONReader2,IJSONWriter等很多,我在这里偷懒直接使用了AO中自带的接口,如果不用AO中的这些接口,自己借助一些json的解析工具如:JSON.NET也是可以的。

6、获取token

        public string GenerateAGSToken_RESTAdmin(string restAdmin, string username, string password)
        {
            try
            {
                if (restAdmin.EndsWith("\\"))
                {
                    restAdmin = restAdmin.Substring(0, restAdmin.Length - 1);
                }
                if (restAdmin.EndsWith("services"))
                {
                    restAdmin = restAdmin.Substring(0, restAdmin.Length - 9);
                }

                string loginUrl = restAdmin + "/generateToken";
                WebRequest request = WebRequest.Create(loginUrl);
                request.Method = "POST";
                string credential = "username=" + username + "&password=" + password + "&client=requestip&expiration=&f=json";
                byte[] content = Encoding.UTF8.GetBytes(credential);
                request.ContentLength = content.Length;
                request.ContentType = "application/x-www-form-urlencoded";
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(content, 0, content.Length);
                requestStream.Close();
                WebResponse response = request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);
                string result = reader.ReadToEnd();
                IJSONReader2 pJsonReader = new JSONReaderClass();
                IJSONObject pOb = pJsonReader.ParseJSONString(result) as IJSONObject;
                string token;
                if (pOb.TryGetValueAsString("token", out token))
                {
                }            
                return token;
            }
            catch { return ""; }
        }
//""表示根目录
    

7、 停止服务


        public  bool StopService_RESTAdmin(string restAdmin, string username, string password, string serviceName, string pType, string pFolder)
        {
            try
            {
              //  string token = GenerateAGSToken_RESTAdmin(restAdmin, username, password);
                restAdmin = restAdmin.EndsWith("/") ? restAdmin.Substring(0, restAdmin.Length - 1) : restAdmin;
if (pFolder.Length > 0)
                {
                    pFolder = pFolder.StartsWith("/") ? pFolder : "/" + pFolder;
                }

                string serviceUrl = restAdmin + "/services" +pFolder+"/"+  serviceName + "." + pType + "/stop";
                WebRequest request = WebRequest.Create(serviceUrl);
                string postcontent = "f=pjson&token=" + token;
                Byte[] content = Encoding.UTF8.GetBytes(postcontent);
                request.ContentLength = content.Length;
                request.ContentType = "application/x-www-form-urlencoded";
                request.Method = "POST";
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(content, 0, content.Length);
                requestStream.Close();
                WebResponse response = request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);
                string result = reader.ReadToEnd();
                return result.Contains("success");
            }
            catch { return false; }
        }

8、 启动服务


        public  bool StartService_RESTAdmin(string restAdmin, string username, string password, string serviceName,string pServiceType,string pFolder)
        {
            try
            {
             //  string token = GenerateAGSToken_RESTAdmin(restAdmin, username,password);
                restAdmin = restAdmin.EndsWith("/") ? restAdmin.Substring(0, restAdmin.Length - 1) : restAdmin;
if (pFolder.Length > 0)
                {
                    pFolder = pFolder.StartsWith("/") ? pFolder : "/" + pFolder;
                }

                string serviceUrl = restAdmin + "/services" + pFolder + "/" + serviceName + "." + pServiceType + "/start";//服务名称+"."+类型
                WebRequest request = WebRequest.Create(serviceUrl);
               string postcontent = "f=pjson&token=" + token;

        
                Byte[] content = Encoding.UTF8.GetBytes(postcontent);
                request.ContentLength = content.Length;
                request.ContentType = "application/x-www-form-urlencoded";
                request.Method = "POST";
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(content, 0, content.Length);
                requestStream.Close();
                WebResponse response = request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);
                string result = reader.ReadToEnd();
                return result.Contains("success");
            }
            catch { return false; }
        }

9、 获取服务的目录,名称和类型


        //目录,服务名称,类型
        Dictionary<string, Dictionary<string, string>>  pServiceType = new Dictionary<string, Dictionary<string, string>>();
        Dictionary<string, string> pDic = new Dictionary<string, string>();
        public Dictionary<string, Dictionary<string, string>>  ListServices_RESTAdmin(string restAdmin, string username, string password, string folder)
        {
            try
            {
               //使用WebRequest 发送请求
                restAdmin = restAdmin.EndsWith("/") ? restAdmin.Substring(0, restAdmin.Length - 1) : restAdmin;
                string serviceUrl = restAdmin + "/" + folder;
                WebRequest request = WebRequest.Create(serviceUrl);
               string postcontent = "f=json&token=" + token;
               // json格式
                Byte[] content = Encoding.UTF8.GetBytes(postcontent);
                request.ContentLength = content.Length;
                //
                request.ContentType ="application/x-www-form-urlencoded";
                request.Method = "POST";
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(content, 0, content.Length);
                requestStream.Close();
                WebResponse response = request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);
                string result = reader.ReadToEnd();
                int index = result.IndexOf("services");
                Dictionary<string, string> pSer = new Dictionary<string, string>();
                IJSONReader2 pJsonReader = new JSONReaderClass();
                IJSONObject pOb = pJsonReader.ParseJSONString(result) as IJSONObject;
                //"folders":["BusSimulation","System","Utilities"]
                //根目录
                   pServiceType.Add("/", new Dictionary<string, string>());
                   IJSONArray pFodArr;  
                    if(pOb.TryGetValueAsArray("folders",out pFodArr))
                    {
                        for (int i = 0; i < pFodArr.Count; i++)
                        {
                            pServiceType.Add(pFodArr.get_Value(i).ToString(), new Dictionary<string, string>());                          
                        }                    
                    }
                
                if (pOb.MemberExists("services"))
                {
                   object pJs;
                   if (pOb.TryGetValue("services", out pJs))
                   {
                       if (pJs is IJSONArray)
                       {
                           IJSONArray pArray = pJs as IJSONArray;

                           for (int i = 0; i < pArray.Count; i++)
                           {
                               if (pArray.get_Value(i) is IJSONObject)
                               {
                                   IJSONObject pType = pArray.get_Value(i) as IJSONObject;

                                  // {"folderName":"/","serviceName":"GZCache","type":"MapServer","description":""}
                                   string folderName;
                                   //服务的目录
                                   if(pType.TryGetValueAsString("folderName",out folderName))
                                   {
                                   }
                                    string serviceName;
                                    //服务的名称
                                   if(pType.TryGetValueAsString("serviceName",out serviceName))
                                   {
                                   }
                                    string AGSType;
                                    //服务的类型
                                   if(pType.TryGetValueAsString("type",out AGSType))
                                   {
                                   }
                                   pServiceType[folderName].Add(serviceName, AGSType);
                               }

                           }


                       }
                   }
                }

            }
            catch { }

            return pServiceType;
        }
 

10、  删除服务

     public bool DeleteService_RESTAdmin(string restAdmin, string username, string password, string serviceName,string pType,string pFolder )
        {
            try
            {

                //string token = GenerateAGSToken_RESTAdmin(restAdmin, username, password);
                restAdmin = restAdmin.EndsWith("/") ? restAdmin.Substring(0, restAdmin.Length - 1) : restAdmin;

if (pFolder.Length > 0)
                {
                    pFolder = pFolder.StartsWith("/") ? pFolder : "/" + pFolder;
                }

                string serviceUrl = restAdmin + "/services" +pFolder+"/"+ serviceName + "." + pType + "/delete";
                WebRequest request = WebRequest.Create(serviceUrl);
                string postcontent = "f=pjson&token=" + token;
                Byte[] content = Encoding.UTF8.GetBytes(postcontent);
                request.ContentLength = content.Length;
                request.ContentType = "application/x-www-form-urlencoded";
                request.Method = "POST";
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(content, 0, content.Length);
                requestStream.Close();
                WebResponse response = request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);
                string result = reader.ReadToEnd();
                return result.Contains("success");
            }
            catch { return false; }
        }

11、  服务是否停止

   public bool GetStatus_RESTAdmin(string restAdmin, string username, string password, string serviceName, string pServiceType, string pFolder)
        {
            try
            {
                //  string token = GenerateAGSToken_RESTAdmin(restAdmin, username,password);
                restAdmin = restAdmin.EndsWith("/") ? restAdmin.Substring(0, restAdmin.Length - 1) : restAdmin;
                string serviceUrl = restAdmin + "/services" + pFolder + "/" + serviceName + "." + pServiceType + "/status";//服务名称+"."+类型
                WebRequest request = WebRequest.Create(serviceUrl);
                string postcontent = "f=pjson&token=" + token;
                Byte[] content = Encoding.UTF8.GetBytes(postcontent);
                request.ContentLength = content.Length;
                request.ContentType = "application/x-www-form-urlencoded";
                request.Method = "POST";
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(content, 0, content.Length);
                requestStream.Close();
                WebResponse response = request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);
                string result = reader.ReadToEnd();
                return result.Contains("STOPPED");
            }
            catch { return false; }
        }

猜你喜欢

转载自blog.csdn.net/huluanchushou/article/details/84745250