博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ArcGSIServer服务无法远程连接

Posted on 2010-07-17 10:26  星尘的天空  阅读(978)  评论(3编辑  收藏  举报

/********************************************************/

//将ArcGISServer地图服务用户信息注册到Web APP中

//write by zcg

//Beijin

//2010年7月17日

/********************************************************/

 

  我们在使用ArcGISServer服务的时候,就首先要发布Server服务,然后我们就可以远程访问地图服务,当然我们也可以访问本地的地图服务。

那么什么是远程访问,什么是本地访问?

远程访问:

我们在创建Web站点的时候,设置的访问方式为HTTP模式,即,我们访问的该Server服务是要通过IIS来进行访问的。

本地访问:

我们不需要通过IIS,仅仅是在通过一个运行的时候,系统分配的一个端口来访问本地的计算机资源,所谓的本地资源即使:Web应用程序,以及ArcGISServer地图服务都需要再同一台计算机。即使我们的Web APP和ArcGISServer地图服务都在同一个计算机上面,如果我们通过IIS访问,也称之为远程访问。

 

  ArcGISServer对于远程服务的访问的安全性进行了很严格的限制,即,只有在ArcGISServer上注册的用户并且将这些用户添加到agsadmin或者agsuse两个组其中的一个里面才能对其运程的ArcGISServer地图服务进行访问。安装ArcGISServer的时候,系统默认的创建三个用户SOM,SOC,以及ArcGISWebServices三个用户,但是如果不把这个用户添加到相应的组里面我们也是无法进行访问的。 Agsadmin组是管理和使用ArcGIServer服务的,agsuse地图服务是仅仅能够使用这个组,而没有管理的权限。具体的添加相应的用户到ArcGISServer的方法我们可以参考其他的博客文章。只有我们有访问ArcGISServer服务的权限,我们才能在我们创建的Web App中看到地图,否则即使程序运行正常不报错,那么我们的应用程序也看不到地图。

 

  我们利用Web ADF开发框架进行ADF开发的时候,一般都要访问ArcGISServer地图服务的,这个时候我们的应用程序就要有访问权限,那么如何让Web APP有访问的权限呢,我们就需要将能够访问ArcGISServer地图服务的用户注册到我们创建的Web APP中,这一步的目的就是要告诉ArcGISServer地图服务器,我们这个Web App是有你的地图服务的访问权限的,如果我要访问你的服务,你就得给我提供这个服务,而不能拒绝我。我们可以这样比喻:ArcGISServer就好像一个大房子,房子有门锁着,她有三个钥匙,分别是:ArcGISWebServices,ArcSOM,ArcSOC。我们的应用程序就比如一个人,这个人如果要想进入这个房间就要有这个三个钥匙中的一个,才能进入这个房间。 也就是说,如果这个人要进入房间,第一步就要先把这个钥匙装在身上。 我们的App ArcGISServer用户注册就相当于将访问ArcGISServer地图的钥匙注册到我们创建的Web APP中了。这样我们的应用程序就可以访问ArcGISServer服务了。

注册ArcGISSever服务的主要步骤为:

 

在VS.Net里开发ArcGIS Web项目时,要求用户验证信息,有2种方法:
1. 在Web.Config内明码输入用户信息,形如:<identity impersonate ="true" userName ="fareast\v-sufanj" password ="aaaaaaa"/>
2. 第一种方法显然不太安全,那么可以这样做:
右击“解决方案”,打开“Add ArcGIS Identity......”(如下图)

然后输入:

ArcGISServer地图服务的用户名称、用户密码以及ArGISServer服务所在的服务器的名称。

 

记得将“Encrypt identity in web.config”勾上,这是为了将Web config上添加的注册信息使用加密格式,用户保护ArcGISServer地图服务的信息安全。

如果我们没有选中【Encrypt identity in web.config】,那么我们在WebApp中注册的用户信息就会以明文的格式显示在配置文件里面,很显然这个是很不安全的。

点“OK”后那么在Web.Config页将增加如下信息:
<identity configProtectionProvider="DataProtectionConfigurationProvider">
       <EncryptedData>
          <CipherData>     
                 <CipherValue>O4ToP2xqjgQAAAAAAl/G+70v6ftWRxCz/zdrtn7tssJg92uosXxgs6dIK2F8uQI</CipherValue>
          </CipherData>
       </EncryptedData>
    </identity>
同时你会发现有此提示:“configProtectionProvider" attribute is not decleared; "EncryptedData" is not contained in the "identity ". ;不过项目能编译通过,也不影响使用!具体原理没搞明白!呵

然后我们的APP就能对ArcGISServer地图服务进行远程地图访问了。

特别注意:如果用户是域帐号,那么在上图中最下面文本框中须输入的域名(如本例),这与登录ArcGIS Server Manager的信息一致(如下图)若非域帐号则直接输入连接机器名!

 

还有一点需要注意:在我们动态实现创建专题地图的时候,需要创建一个ArcGISServer地图服务的一个远程的连接,如果我们没有进行上面的操作,对Web App的远程访问没有进行用户注册,那么我们就不能成功的创建一个连接,但是如果们进行的是利用本地的端口来访问本地的Server服务,则没有问题,问题的关键是,我们创建的App不能仅仅在本地访问吧,即使在本地访问也需要放到本地的IIS上吧,我们总不能每次访问APP都要用VS来打开工程,然后单击运行按钮吧。所以我们都是需要对Web App进行Server用户信息注册的。这个问题我们在创建IservicesContext对象的时候就会遇到这个问题。

 

至此:我们已经对WebAPP中ArcGISServer地图用户注册的原因以及注册的步骤已经简单的介绍了一下,如果有什么还需要补充或者更正的地方,请即使联系我,大家共同学习、进步。