Подгружение слоев на лету

0 голосов
спросил 17 Апр, 07 от Dvvsoft (220 баллов) в категории Программные продукты Esri
Здравствуйте, как можно подгружать слои программно не портя при этом сервисы. я откапал такой код:

            WebMap webMap = Map1.CreateWebMap();          
            IMapServer mapServer  = webMap.MapServer;
            IMapServerObjects mapServerObjects = (IMapServerObjects) mapServer;
            IMap map = mapServerObjects.get_Map(mapServer.DefaultMapName);
            webMap.ManageLifetime(layer);

но выкидывает ошибку и сервис начинает работать заново только при перезапуске
помогите пожалуйста, что я делаю не так?

3 Ответы

0 голосов
ответил 17 Апр, 07 от Dvvsoft (220 баллов)
Сам же и нашел ответ на esri.com :)
может кому нибудь пригодиться:

using (WebMap webMap = Map1.CreateWebMap())
            {
                IServerContext serverContext;
                IMapServer mapServer;
                IMapDescription mapDesc;
           
                serverContext = webMap.ServerContext;
                mapServer = webMap.MapServer;
               
                IMapServerObjects mapServerObj = (IMapServerObjects)mapServer;
                string strMapName = mapServer.DefaultMapName;
                IMap map = mapServerObj.get_Map(strMapName);
                map.ClearLayers();

                #region Set Server Properties
                IPropertySet propertySet = serverContext.CreateObject("esriSystem.PropertySet") as IPropertySet;

                propertySet.SetProperty("server", "linuxserver");
                propertySet.SetProperty("instance", "esri_sde");
                //propertySet.SetProperty("database", "HistMaps");
                propertySet.SetProperty("user", "vovan");
                propertySet.SetProperty("password", "vovan");
                propertySet.SetProperty("version", "SDE.DEFAULT");
                #endregion

                IWorkspaceFactory workspaceFactory = serverContext.CreateObject("esriDataSourcesGDB.SdeWorkspaceFactory") as IWorkspaceFactory;
                IWorkspace WS2 = workspaceFactory.Open(propertySet, 0) as IWorkspace;
                IFeatureWorkspace featureWorkspace = workspaceFactory.Open(propertySet, 0) as IFeatureWorkspace;
                IFeatureLayer l= null;

                IFeatureClass fc = featureWorkspace.OpenFeatureClass(@LayerName);

                IFeatureLayer fl = serverContext.CreateObject("esriCarto.FeatureLayer") as FeatureLayer;
                fl.FeatureClass = fc;               
                fl.Name = fc.AliasName;
               
                webMap.Map.AddLayer(fl);
                map.get_Layer(0).Visible = true;

                // Apply changes to MapServer object
                mapServerObj.RefreshServerObjects();
                webMap.Refresh();                
            }
0 голосов
ответил 17 Апр, 07 от Holger (19,360 баллов)
Откуда на esri.com user vovan :) ?
0 голосов
ответил 20 Апр, 07 от Peps (5,330 баллов)
А при добовалении слоя на лету или к примеру изменения
datasource для слоя, информация изменится только для одного клиента или для всех?
У меня возникает проблема, что если один пользователь добавляет слой, то этот слой вносится в шаблон mxd.
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...