虚拟服务

Geoserver中的不同类型的服务包括WFS、WMS和WCS,通常称为“开放式Web服务(OWS)”服务。这些服务是全局的,因为每个服务发布服务器上配置的每个层。WFS发布所有矢量图层(要素类型),WCS发布所有栅格图层(Coverage),而WMS发布所有内容。

A 虚拟服务 是仅由层的子集组成的全局服务的视图。虚拟服务基于GeoServer工作区。对于存在的每个工作区,都存在一个虚拟服务。虚拟服务只发布属于相应工作区的那些层。

警告

虚拟服务仅适用于核心OWS服务,而不适用于通过geowebcache访问的OWS服务。它也不适用于其他子系统,如REST。

当客户端访问虚拟服务时,该客户端只能访问由该虚拟服务发布的层。通过虚拟服务访问全局服务中的层将导致异常。这使得虚拟服务成为划分层访问的理想选择。服务提供者可能希望为不同的客户机创建多个服务,将一个服务URL传递给一个客户机,将另一个服务URL传递给另一个客户机。虚拟服务允许服务提供者通过一个地理服务器实例来实现这一点。

按工作区筛选

请考虑以下列出所有功能类型的geoserver版本配置中的WFS功能文档片段:

http://localhost:8080/geoserver/wfs?request=GetCapabilities

<wfs:WFS_Capabilities>

  <FeatureType xmlns:tiger="http://www.census.gov">
   <Name>tiger:poly_landmarks</Name>
--
  <FeatureType xmlns:tiger="http://www.census.gov">
   <Name>tiger:poi</Name>
--
  <FeatureType xmlns:tiger="http://www.census.gov">
   <Name>tiger:tiger_roads</Name>
--
  <FeatureType xmlns:sf="http://www.openplans.org/spearfish">
   <Name>sf:archsites</Name>
--
  <FeatureType xmlns:sf="http://www.openplans.org/spearfish">
   <Name>sf:bugsites</Name>
--
  <FeatureType xmlns:sf="http://www.openplans.org/spearfish">
   <Name>sf:restricted</Name>
--
  <FeatureType xmlns:sf="http://www.openplans.org/spearfish">
   <Name>sf:roads</Name>
--
  <FeatureType xmlns:sf="http://www.openplans.org/spearfish">
   <Name>sf:streams</Name>
--
  <FeatureType xmlns:topp="http://www.openplans.org/topp">
   <Name>topp:tasmania_cities</Name>
--
  <FeatureType xmlns:topp="http://www.openplans.org/topp">
   <Name>topp:tasmania_roads</Name>
--
  <FeatureType xmlns:topp="http://www.openplans.org/topp">
   <Name>topp:tasmania_state_boundaries</Name>
--
  <FeatureType xmlns:topp="http://www.openplans.org/topp">
   <Name>topp:tasmania_water_bodies</Name>
--
  <FeatureType xmlns:topp="http://www.openplans.org/topp">
   <Name>topp:states</Name>
--
  <FeatureType xmlns:tiger="http://www.census.gov">
   <Name>tiger:giant_polygon</Name>

</wfs:WFS_Capabilities>

上面的文档列出了服务器上配置的每个功能类型。现在考虑以下功能请求:

http://localhost:8080/geoserver/topp/wfs?request=GetCapabilities

上述请求中感兴趣的部分是WFS服务的“topp”前缀。上述URL将在功能文档中生成以下功能类型:

<wfs:WFS_Capabilities>

   <FeatureType xmlns:topp="http://www.openplans.org/topp">
    <Name>topp:tasmania_cities</Name>
 --
   <FeatureType xmlns:topp="http://www.openplans.org/topp">
    <Name>topp:tasmania_roads</Name>
 --
   <FeatureType xmlns:topp="http://www.openplans.org/topp">
    <Name>topp:tasmania_state_boundaries</Name>
 --
   <FeatureType xmlns:topp="http://www.openplans.org/topp">
    <Name>topp:tasmania_water_bodies</Name>
 --
   <FeatureType xmlns:topp="http://www.openplans.org/topp">
    <Name>topp:states</Name>

 </wfs:WFS_Capabilities>

上面的功能类型对应于那些在服务器上配置为“topp”工作区一部分的功能类型。

虚拟服务的结果不仅限于服务的能力文档。当客户机访问虚拟服务时,对于所有操作,它仅限于这些层。例如,考虑以下WFS功能请求:

http://localhost:8080/geoserver/topp/wfs?request=GetFeature&typename=tiger:roads

上述请求导致异常。由于请求功能类型“tiger:roads”不在“topp”工作区中,客户端将收到一个错误,说明请求的功能类型不存在。

分层过滤

通过将层的名称指定为虚拟服务的一部分,可以进一步筛选全局服务。例如,考虑以下功能文档:

http://localhost:8080/geoserver/topp/states/wfs?request=GetCapabilities

感兴趣的部分是WFS服务的“states”前缀。上述URL将生成包含单个功能类型的以下功能文档:

<wfs:WFS_Capabilities>

  <FeatureType xmlns:topp="http://www.openplans.org/topp">
   <Name>topp:states</Name>

<wfs:WFS_Capabilities>

关闭全球服务

通过设置配置标志,可以完全限制对全局OWS服务的访问。禁用全局访问时,OWS服务只能通过虚拟服务进行。尝试全局访问服务的任何客户端都将收到异常。

要禁用全局服务,请登录到Geoserver Web管理界面,然后导航到“全局设置”。取消选中“Enable Global Services”(启用全球服务)复选框。

../_images/global-services.jpg

孤立的工作空间

隔离工作区内容仅在绑定到隔离工作区的虚拟服务的上下文中可见和可查询。这意味着隔离的工作区内容不会显示在全局功能文档中,并且全局服务不能查询隔离的工作区内容。请注意,这些限制不适用于REST API。

可以通过选中 Isolated Workspace 创建或编辑工作区时的复选框。

../_images/isolated_workspace.png

使工作空间处于隔离状态

隔离工作区将能够重复使用另一个工作区已使用的命名空间,但其资源(层、样式等)只有在使用该工作区虚拟服务时才能检索,并且只会显示在这些虚拟服务功能文档中。

只有当两个或多个工作空间中只有一个是非隔离的时,才能在Geoserver中创建具有相同命名空间的两个或多个工作空间,即隔离工作空间在名称空间使用方面没有限制,但两个非隔离工作空间不能使用相同的命名空间。

下列情况将有效:

但不是以下这一条:

最多只有一个非隔离工作区可以使用某个命名空间。

请看下图,它向使用相同命名空间(http://www.stations.org/1.0)及其包含的多个层)的工作区(st1和st2)显示:

../_images/workspaces_example.png

使用相同命名空间的两个工作区,其中一个是隔离的。

在上面的示例中,ST2是隔离的工作区。考虑以下WFS GetFeature请求:

第一个请求以WFS全局服务为目标,请求Layer2,该请求将使用工作区ST1包含的Layer2。第二个请求针对ST2工作区WFS虚拟服务,将使用属于工作区ST2的Layer2。请求3和4将分别使用属于工作区的层2,即ST1和ST2。最后两个请求将失败,因为找不到该功能类型,隔离的工作区内容全局不可见。

The rule of thumb is that resources (layers, styles, etc ...) belonging to an isolated workspace can only be retrieved when using that workspaces virtual services and will only show up in those virtual services capabilities documents.