如果ArcGIS Server和Desktop安装在同一台机器上,这估计是很多人的软件环境,如果这样的话可能需要多安装一点软件(32位的数据库客户端和64位的数据库客户端都需要安装),原因是ArcGIS Server是64位的而Desktop是32位的,制作地图文档,我们是在Desktop中完成的,我们发布服务最后的数据都是给Server用的,所以两个客户端都是需要安装的。
安装完成后,在系统环变量里面配置客户端的路径,64位的写在32位的前面:如我的(oracle 数据库)
D:\app\Administrator\product\11.2.0\client64\bin;D:\app\Administrator\product\11.1.0\client32\bin;
客户端安装完成之后,分别配置网络服务名,如下:
对于SDE 数据库的注册,一种就是我们上面提到的ArcGIS Server托管方式,这种数据库必须是企业级地理数据库,并且一个Server只能注册一个,另外一种可以注册数据库或者企业级地理数据库,在ArcGIS for Desktop中,使用管理员方式连接到ArcGIS Server,右键服务器属性,找到数据存储选项卡,如下图:
注册托管数据库的步骤很容易,我们只需要选择注册托管数据库的这个命令怎出现如下对话框:
输入一个唯一的名称,然后添加数据库连接,如果已经有了.sde文件,只需要import即可,下面是我注册的一个sql server的地理库
若果想注册第二个托管数据库,则会有下面的错误(因为托管的数据库只能注册一个):
如果有了托管数据库,我们可以将shapefile,文件数据库等数据都可以发布为要素服务,下图是我发布一个来自文件数据库的数据,在发布的时候选择要素访问功能,如下图:
发布成功后,在托管数据库中可以看到发布后的数据,如下图:
在服务目录中也可以看到要素服务,我们可以进行增删改操作,注意当我们删除了要素服务中的数据之后,地图服务中的数据是没有变化的,变化的仅仅是托管数据库里面的数据,而地图文档的数据则原封不动。
如果删除这个服务,会出现下面的警告:
点确定之后,服务被删除,并且托管的数据库中和这个服务相关的数据也被删掉了。
这种方式当我们使用不同的用户(数据库用户)发布数据的时候,同一个库的数据可以多次注册。
同时这种情况又可以分为发布者和Server是否使用同一个数据库,如果是同一个数据库见1.2.1,不同的见1.2.2(这个见ArcGIS 10.1 for Server 数据注册(上)http://blog.csdn.net/arcgisserver_book/article/details/7940359
的内容)
如果使用同一个数据库,并且32的客户端和64的客户端配置了相同的网络服务名,则如下:
对于这种方式,正如我刚才说的一样制作地图需要一个连接也就是发布数据的连接,数据最后是要到Server中的,Server也是要连接数据库的,如果我们在32位的客户端和64位客户端配置的网络服务名相通,那么我们将Same as publisher database connection这个选项选上,如果在32的客户端配置了一个网络服务命名而64的客户端没有,就会出错,下面的test是在32位客户端配置,64的客户端上没这个网络服务名。
错误如下所示:
如果32的客户端和64的客户端对同一个数据库的网络服务名不相同,该则么办?
数据库只有一个,我们可以按照下面的去做,不要勾选Create geodata service,因为我们不需要数据库同步操作。
而且服务也发布成功了,在发布之后的msd文档中,我们看到所使用的连接地址如下:
对于1.2.2的这种情况,也就是 Server使用的数据库和发布者使用的数据库不同的话,这要有一个前提就是服务器的数据库里面必须有发布者数据库的一个副本,比如发布者采用sql server数据库,服务器采用一个oracle数据库,我们按照下面的配置:
如果选择了Create geodata service的话,那么还会出现创建geodata service的进度条,如下:
在manager页面中也可以看到geodata service 服务,如下图:
我们知道geodata service 是用来数据同步的,也就是说数据库中要有数据的的一个replica才可以同步数据,当然数据同步的时候有one-way,two-way,如果在oracle数据库中不存在数据的一个replica,我们在尝试使用geodata service的同步变化的的时候,会看到下面的提示。
说道这里我们可能想到这种方式的同步其实就是分布式数据库的那种机制。
在这里我向另一个orcal数据库采用two-way 方式采用,数据如下:
发布服务的时候选择了要素访问功能,然后添加了一个要素,结果如下:
然后在geodata service 服务上右键-分布式数据库,同步变化,如下图:
同步之后我们就可以看到地图服务的数据已经发生了变化。
在上面个我们已经说得很清楚了,安装Server的机器上一定要有64位的Oracle客户端,现在以我的机器说明。
我的Oracle是用oracle用户安装的,Server是用arcgis用户安装的,如果没有在arcgis的用户配置文件中没有配置Oracle的一些环境变量,arcgis这个用户是不能访问Oracle的,所以我在arcgis的.bash_profile文件中添加了Oracle的配置信息,并且更改了Oracle安装目录的权限,并配置一下网络服务名,然后用ArcMap连接,并注册,相关步骤如下图。
l 添加配置信息:
l 更改权限:
l 在arcgis 用户下配置网络服务名:
l 在ArcMap中注册:
注册成功,发布服务测试,OK!