站点和站点服务

1.1       配置站点

在第二章中,我们介绍过站点由若干MapGuide服务器组成,MapGuide服务器包括站点服务器和支持服务器两类服务器。MapGuide服务器和Web应用服务器和MapGuide Web扩展部署到不同的计算机上,例如在图4-1中,站点由两台MapGuide服务器组成,其中一台用作站点服务器,一台用作支持服务器,这两台服务器和MapGuide Web扩展都部署在不同的计算机上。这时,它们都必须相互知道彼此的IP地址和通信端口,MapGuide Web扩展需要知道站点服务器的IP地址,这样才能够将来自客户端的请求转发给站点服务器;站点服务器也需要知道支持服务器的地址,这样才能将服务请求转发到部署了此服务的支持服务器。

Site Server

4-1 站点示例

 

通过MapGuide Web扩展配置文件webconfig.iniMapGuide Web扩展能够找到站点服务器的IP地址和通信端口。打开这个文件,查看SiteConnectionProperties部分的内容,可以看到类似如下的信息,IpAddressPort就是用来指定站点服务器的IP地址和通信端口。

[SiteConnectionProperties]

# *****************************************************************************

# S I T E  C O N N E C T I O N

#

# Property Name                    Description

# -----------------------------------------------------------------------------

# IpAddress                        The IP address of the site server

#                                       0 < Length <= 255

# Port                             The port to use for site operations

#

#                                  WARNING: If you change the port # here you

#                                           must also change the corresponding

#                                           port # for the server configuration

#                                           file.

#

# *****************************************************************************

IpAddress                          =127.0.0.1

Port                               = 2812

通过MapGuide 服务器配置文件serverconfig.ini,够找到站点服务器的IP地址和通信端口,以及当前服务器是否部署了某种服务。打开这个文件,查看SiteConnectionProperties部分的内容,IpAddressPort就是用来指定站点服务器的IP地址和通信端口;查看HostProperties部分的内容,属性DrawingServiceFeatureServiceKmlServiceMappingServiceRenderingServiceResourceServiceSiteServiceTileService用于指定是否部署这些服务到当前服务器上。

[SiteConnectionProperties]

# *****************************************************************************

# S I T E  C O N N E C T I O N

#

# Property Name                    Description

# -----------------------------------------------------------------------------

# IpAddress                        IP address of the site server

#                                       0 < Length <= 255

# MaxConnections                   Max # of open site connections

#                                       0 < Value <= 1024

# Port                             Port to use for site operations

#

#                                  WARNING: If you change the port # here you

#                                           must also change the corresponding

#                                           port # for the web tier configuration

#                                           file.

#

# QueueSize                        Max # of site operations to queue

#                                       0 < Value <= 1024

# ThreadPoolSize                   # of threads available for processing

#                                  site operations

#                                       0 < Value <= 1024

# *****************************************************************************

IpAddress                          = 127.0.0.1

MaxConnections                     = 20

Port                               = 2812

QueueSize                          = 20

ThreadPoolSize                     = 10

 

[HostProperties]

# *****************************************************************************

# H O S T

#

# Property Name                    Description

# -----------------------------------------------------------------------------

# DrawingService                  0 = service unavailable, 1 = service available

# FeatureService                   0 = service unavailable, 1 = service available

# KmlService                      0 = service unavailable, 1 = service available

# MappingService                  0 = service unavailable, 1 = service available

# RenderingService                 0 = service unavailable, 1 = service available

# ResourceService                  0 = service unavailable, 1 = service available

# SiteService                      0 = service unavailable, 1 = service available

# TileService                      0 = service unavailable, 1 = service available

# *****************************************************************************

DrawingService                     = 1

FeatureService                      = 1

KmlService                        = 1

MappingService                    = 1

RenderingService                   = 1

ResourceService                    = 1

SiteService                        = 1

TileService                        = 1

1.2       站点服务

站点服务是MapGuide其他类型服务的基础,它主要用于:

l  认证用户信息,如用户是否存在,密码是否正确。

l  创建MapGuide提供的服务,如资源服务、要素服务等。

l  枚举用户、用户组、角色等信息。

l  管理Session

1.2.1  创建到站点服务器的连接

MgSiteConnection用于创建到站点服务器的连接,调用方法MgSiteConnection::Open(…)就可以创建一个到站点服务器的连接,在此我们需要通过MgUserInformation的一个实例提供用户认证信息,例如用户名、密码或Session ID。需要注意的是,在创建到站点服务器的连接之前,一定要确保调用MgInitializeWebTier(…)初始化了Web层。

void Open(MgUserInformation userInformation)

如下的代码展示了如何创建一个到站点服务器的连接。

// 初始化Web

MgInitializeWebTier('C:/Inetpub/wwwroot/PhpMapAgent/webconfig.ini');

// 创建到站点的连接

$userInformation = new MgUserInformation('Administrator', 'admin');

$siteConnection = new MgSiteConnection();

$siteConnection->Open($userInformation);

1.2.2  创建MapGuide提供的服务

MgServiceType定义了MapGuide提供的所有服务:

l  MgServiceType::ResourceService:资源服务

l  MgServiceType::DrawingService:制图服务

l  MgServiceType::FeatureService:制图服务

l  MgServiceType::MappingService:制图服务

l  MgServiceType::RenderingService:制图服务

l  MgServiceType::TileService:制图服务

l  MgServiceType::KmlServiceKML服务

查看上面定义的服务,我们可以发现MgServiceType并没有定义站点服务,这是因为MgServiceType中定义的服务恰恰是由站点服务创建的。调用方法MgSiteConnection::CreateService(…)可以创建一个指定类型的服务,参数serviceType用来服务类型,它可以是MgServiceType中定义的任何一个值。需要注意的是,在使用此方法之前,要保证已经调用方法MgSiteConnection::Open(…)建立了一个到站点服务器的连接。

MgService CreateService(int serviceType)

下面的代码展示了如何创建一个要素服务。

$webconfigiDotIniPath =

"C:/Program Files/MapGuideOpenSource/WebExtensions/www/webconfig.ini"

MgInitializeWebTier($webconfigiDotIniPath);

$adminUser = new MgUserInformation("Administrator", "admin");

$siteConnection = new MgSiteConnection();

$siteConnection->Open($adminUser);

$siteConnection->CreateService(MgServiceType::FeatureService);

1.2.3  创建MgSite对象实例

MgSite包含用来枚举用户、用户组和角色,以及管理Session的功能,但是MgSite并没有提供公有的构造方法,所以必须通过调用方法MgSiteConnection::GetSite()来获取一个MgSite对象的实例。需要注意的是,在调用此方法之前,要保证已经调用方法MgSiteConnection::Open(…)建立了一个到站点服务器的连接。

MgSite GetSite();

1.2.4  枚举用户、用户组和角色

方法MgSite::EnumerateGroups()用于返回一个XML格式的用户组列表, XML使用了文件GroupList-1.0.0.xsd指定的Schema

MgByteReader EnumerateGroups();

在安装MapGuide服务器之后,如果没有添加任何用户组,调用此方法会返回如下的用户组列表,可以看到此时MapGuide服务器只创建了一个用户组“Everyone”。

<?xml version=”1.0” encoding=”UTF-8”?>

<GroupList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="GroupList-1.0.0.xsd">

       <Group>

              <Name>Everyone</Name>

              <Description>Built-in group to include all users</Description>

       </Group>

</GroupList>

方法MgSite::EnumerateUsers(…)XML格式返回指定用户组内的所有用户, XML使用了文件UserList-1.0.0.xsd指定的Schema,参数group用于指定一个用户组,如果将传入一个空的用户组名称,那么返回所有的用户。

MgByteReader EnumerateUsers(String group);

在安装MapGuide服务器之后,如果没有添加任何用户,调用此方法会返回如下的用户列表,可以看到此时MapGuide服务器创建了五个用户“Administrator”、“Anonymous”、“ Author”、“ WfsUser”和“WmsUser”。

<?xml version="1.0" encoding="UTF-8"?>

<UserList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="UserList-1.0.0.xsd">

       <User>

              <Name>Administrator</Name>

              <FullName>Site Administrator</FullName>

              <Description>Built-in account for administering the site</Description>

       </User>

       <User>

              <Name>Anonymous</Name>

              <FullName>Anonymous User</FullName>

              <Description>Built-in account for guests with Viewer role</Description>

       </User>

       <User>

              <Name>Author</Name>

              <FullName>Map Author</FullName>

              <Description>Built-in account for users with Author role</Description>

       </User>

       <User>

              <Name>WfsUser</Name>

              <FullName>WFS User</FullName>

              <Description>Built-in account for WFS users with Viewer role</Description>

       </User>

       <User>

              <Name>WmsUser</Name>

              <FullName>WMS User</FullName>

              <Description>Built-in account for WMS users with Viewer role</Description>

       </User>

</UserList>

方法MgSite::EnumerateRoles(…)用于返回指定用户所属的角色列表,参数user用于指定一个用户。

MgStringCollection EnumerateRoles(String user);

1.2.5  管理Session

在第二章,我们介绍过MapGuide在服务器层与Web层间引入了Session的概念,用来提高服务器层与Web层间请求和响应的性能。每个Session通过一个唯一的Session ID加以标识,例如“71b5d990-0000-1000-8000-005056c00008_eng”。调用方法MgSite::CreateSession()可以为当前用户创建一个Session,返回的字符串是新建SessionID。在创建Session的同时,还会创建一个资源库,这个资源库绑定于当前用户,用于存储和当前用户相关的资源,例如临时图层等资源,它的生命周期和Session相同,当Session销毁的时候,它也同时销毁。关于资源和资源库的内容,我们会在后续章节进行介绍。

String CreateSession();

下面的代码展示了如何创建一个Session

MgInitializeWebTier('C:/Inetpub/wwwroot/PhpMapAgent/webconfig.ini');

$userInformation = new MgUserInformation('Administrator', 'admin');

$siteConnection = new MgSiteConnection();

$siteConnection->Open($userInformation);

$site = $siteConnection->GetSite();

$sessionID = $site->CreateSession();

$userInformation->SetMgSessionId($sessionID);

调用MgSite::DestroySession()可以销毁指定的Session,但是这个方法并不是必需的,当一个Session在设定的时间内没有任何和客户端的通信,那么MapGuide服务器会认为这个Session已经超时了,从而销毁它。通过服务器配置文件serverconfig.ini,我们可以设置这个值。打开这个文件serverconfig.ini,查看SiteServiceProperties部分的内容,可以看到类似如下的信息,SessionTimeOut用于设定超时阈值,SessionTimerIterval用于设定检查Session超时的时间间隔,它们的单位都为妙。

[SiteServiceProperties]

# *****************************************************************************

# S I T E  S E R V I C E

#

# Property Name                    Description

# -----------------------------------------------------------------------------

# SessionTimeout                   Time duration in seconds for when an idle

#                                  session is expired

#                                       0 < Value <= 86400

# SessionTimerInterval               Time interval in seconds for when the server

#                                  checks for idle sessions

#                                       0 < Value <= 2147483647

# *****************************************************************************

SessionTimeout                   = 1200

SessionTimerInterval               = 400

除了创建和销毁Session之外,还可以通过方法MgSite::GetCurrentSession()获得当前SessionID,通过方法MgSite::GetUserForSession()获得当前Session对应的用户名称,例如如果以用户 Administrator”登录创建了一个Session,那么调用此方法会返回字符串“Administrator”。

String GetCurrentSession();

String GetUserForSession();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值