您的位置:首页 > 其它

利用AGS ADF动态创建地图服务时遇到的问题

2009-06-25 14:27 477 查看
利用AGS ADF动态创建地图服务时遇到的问题

1. SilverLight和Flex客户端访问地图服务引起的跨域/安全沙箱问题。可以使用完全相同内容的crossdomain.xml,而且就放置这一个文件就可以解决问题。Net和Java放置的位置不同。

a) 内容

<?xml version="1.0"?>

<!DOCTYPE cross-domain-policy

SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>

<!-- domain="*" everyone access -->

<allow-access-from domain="*" />

</cross-domain-policy>

b) Net:一般默认放在C:\Inetpub\wwwroot下即可

c) Java:[ArcGIS Server 安装目录] \ArcGIS \java\web_output\下

2. SilverLight和Flex访问WCF服务引起的跨域问题,也是crossdomain.xml文件,不过内容和位置都不同了

a) 内容

<?xml version="1.0"?>

<!DOCTYPE cross-domain-policy

SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>

<!-- domain="*" everyone access -->

<allow-http-request-headers-from domain="*" headers="*"/>

</cross-domain-policy>

b) 位置:WCF项目根目录下即可

3. SilverLight code4001 ImageError错误:地图服务虚拟输出路径有问题。因为我是在程序代码中动态创建的地图服务,所以虚拟输出路径写的与系统中不一致。害得我一直以为是跨域访问问题。

4. 没有错误但看不到地图:赶快去查看一下你是不是指定了客户端显示地图的范围,也就是那个Extent属性,我就是拷贝的代码,结果实际位置不在当前设置范围内,肯定看不到图啦,还不清楚到底怎么回事。小白啊

5. 无法连接到地图服务器:

a) 如果地图服务器是分布式的,也就是说在程序和地图服务器不在同一台机器。那必须要使用和访问的地图服务器相同的arcgis server manager身份和密码完全一致的用户进行登录来运行或者测试连接地图服务器才可以使用。否则肯定异常,要求特殊权限。

b) 本机部署,程序和地图服务器在同一台机器,设置完所有权限后,建议最好重新启动计算机再进行连接测试。当然,如果你不重启,你可以切换到arcgis server manager管理员用户进行登录,应该就可以直接连接成功啦。

c) 连接服务器名称尽量使用IP地址,反正我用机器名称有的可以连接,有的就死活连不上。而且也可能跟同一台机器部署还是不同机器部署也有关系。

6. 创建动态地图服务的net代码

public static void createMapServices(System.Array mapserviceConfigArray)

{

//可以指定访问用户

//ESRI.ArcGIS.ADF.Identity identity = new ESRI.ArcGIS.ADF.Identity("arcgismanager", "1", "lenovo-pc");

//ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsConnection = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection("lenovo-pc", identity);

//agsConnection.Connect();

//直接使用登录用户权限

IGISServerConnection2 gsConn = new GISServerConnectionClass();

gsConn.Connect("lenovo-pc");

IServerObjectAdmin pServerObjectAdmin = gsConn.ServerObjectAdmin;

IServerObjectConfiguration2 configuration = (IServerObjectConfiguration2)pServerObjectAdmin.CreateConfiguration();

configuration.Name = "AutoAdd";

configuration.TypeName = "MapServer";

IPropertySet props = configuration.Properties;

props.SetProperty("FilePath", @"D:\Program Files\ArcGIS\DeveloperKit\SamplesNET\Server\data\California\California.mxd");//设置MXD的路径

//一下的property并非必须,只要一个filepath就可以发布

props.SetProperty("OutputDir", "c:\\arcgisserver\\arcgisoutput");//图片的输出目录

props.SetProperty("VirtualOutPutDir", "http://lenovo-pc/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\\AutoAdd");//切片的输出路径

props.SetProperty("SOMCacheDir", "c:\\arcgisserver\\arcgiscache");//som的切片输出路径

configuration.Description = "AutoAdd";//Service的描述

configuration.IsolationLevel = esriServerIsolationLevel.esriServerIsolationHigh;//或者esriServerIsolationLow,esriServerIsolationAny

configuration.IsPooled = true;//是否池化

configuration.MaxInstances = 10;//最多的实例数

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;//客户端申请一个服务的最长等待时间

//添加服务到Server

pServerObjectAdmin.AddConfiguration(configuration);

//启动服务

pServerObjectAdmin.StartConfiguration("AutoAdd", "MapServer");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: