Born For SOA--Server对于SOAP的支持

 ArcGIS Server的服务可以通过Local或者Internet两种方式进行连接,Local方式直接连接到SOM上,本地的对象如何和SOM进行交互呢?事实上是通过AO进行交互的,所以你必须在本地有AO对象才可以进行连接,我们平常使用ArcCatlog就可以这样连接,或者通过Engine也可以进行这样的连接。而Internet方式直接连接到Web Service的引用地址,它是通过本地对象连接的,对于Java ADF而言,本地对象表示连接ArcGIS Server的类存在于本地JRE中。Local连接可以改变Server Object的状态,而Internet连接由于只是通过SOAP API进行访问,所有的交互都是无状态的。
对于SOAP的支持是在AO这一级,所以处理每一次SOAP请求,都会需要AO的介入。有两个接口特别要注意一下,一个是IServiceCatalogAdmin,一个是IRequestHandlerIRequestHandler我们已经在上面一节提到过,而IserviceCatalogAdmin是用来得到Server Object所提供服务的WSDL的。
SOM用来向客户端提供WSDL,所有支持的服务类型的WSDL保存在ArcGIS ServerXMLSchema目录下。
我们可以使用IServiceCatalogAdmin接口得到所有服务类型的WSDL,如下面的代码所示:


[Copy to clipboard] [ - ]
CODE:
private void getWSDL(String domain,String username,String password,String myserver){
ServerInitializer initializer = new ServerInitializer();
initializer.initializeServer(domain,username, password);
ServerConnection gisconnection;
try {
       gisconnection = new ServerConnection();
       gisconnection.connect(myserver);
// Get reference to ServerObjectManager class.

IServerObjectManager som =gisconnection.getServerObjectManager();
IServerContext serverContext = som.createServerContext("usa", "MapServer");
IServiceCatalogAdmin2 isc = (IServiceCatalogAdmin2)serverContext.createObject(ServiceCatalog.getClsid());
//       Catalog WSDL
byte[] bitscatalog = isc.getCatalogDescriptionDocument("Catalog","http://localhost");
String catalog_wsdl = new String(bitscatalog,"UTF8");
System.out.println(catalog_wsdl);
//       Service WSDL
byte[] bitsservice =isc.getDescriptionDocument("usa", "MapServer","http://localhost");
String service_wsdl = new String(bitsservice, "UTF8");
System.out.println(service_wsdl);
} catch (UnknownHostException
e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

 
事实上,ArcGISServer每一个ServerObject都实现了IRequestHandler接口,都可以响应SOAP的请求,可以使用下面的方法得到ServerObjectIRequestHandler,并且得到当前地图的Default Map Name.

[Copy to clipboard] [ - ]
CODE:
private void getMapName(IServerContext serverContext){
                  IRequestHandler irh;
                  try {
                            irh =(IRequestHandler)serverContext.getServerObject();
                           String soap_request ="<?xml version='1.0' encoding='utf-8' ?>";
                          soap_request +="<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:tns='http://www.esri.com/schemas/ArcGIS/9.2'>";
                        soap_request +="<soap:Body>";
                      soap_request +="<tns:GetDefaultMapName>";
                      soap_request +="</tns:GetDefaultMapName>";
                      soap_request +="</soap:Body>";
                      soap_request +="</soap:Envelope>";
                    String soap_response =irh.handleStringRequest("map,query,data", soap_request);
                  } catch (AutomationException e) {
                            e.printStackTrace();
                  } catch (IOException e) {
                            e.printStackTrace();
                  }
         }

 
所以,ArcGIS Server处理SOAP请求的能力是与生俱来的,从Server Object诞生那一天起,它就能处理SOAP请求。从而使通过Web Service的方式调用GIS功能变得异常简单。当然,我们一般都不会想Server Object直接发送请求,根据WSDL的描述,通过发送和接受SOAP请求来访问ArcGIS Server工作量十分巨大,那么我们来看看如何在ADF中使用Web Service

阅读更多
文章标签: SOAP SOA Web XML 工作
个人分类: arcgis server
上一篇ArcGIS Server 开发初步 -- 自定义工具
下一篇ArcGIS Server 体系结构
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭