In this topic
The IMSServerConnection abstract base class provides the Send method for sending raw ArcXML requests to ArcIMS services. The Send method permits sending an ArcXML request to the default service type (an image service) or to a custom service type. Custom service types include Query, Geocode, and Extract. The ArcXML request types and their respective custom service types are shown in the following table:
ArcXML Request Type
|
Custom Service
|
GETCLIENTSERVICES
GET_SERVICE_INFO GET_IMAGE |
""
|
GET_FEATURES
|
"Query"
|
GET_GEOCODE
|
"Geocode"
|
GET_EXTRACT
|
"Extract"
|
The Send method returns a string containing the ArcXML response to the ArcXML request.
The following code shows how to send a GET_IMAGE request:
[C#]
connection.ServiceName = "world";
string getimage_request =
"<?xml version = \"1.0\" encoding=\"UTF-8\"?> < ARCXML version = \
"1.1\"><REQUEST><GET_IMAGE><PROPERTIES><ENVELOPE minx= \"-13.62\" miny = \
"33.91\" maxx= \"53.62\" maxy=\"73.33\" /><IMAGESIZE width=\"600\" height=\"400\" /> < / PROPERTIES > < / GET_IMAGE > < / REQUEST > < / ARCXML > ";string response = connection.Send(getimage_request);
The following code shows how to send a GET_FEATURES request:
[C#]
connection.ServiceName = "world";
string getfeatures_request =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?> < ARCXML version = \
"1.1\"><REQUEST><GET_FEATURES outputmode=\"xml\" > < BR > < LAYER id = \
"1\"></LAYER><SPATIALQUERY subfields= \"NAME\" > < BR > < SPATIALFILTER relation = \
"area_intersection\" > < MULTIPOINT > < POINT x = \
"-102.31884\" y=\"62.31884\" /> < / MULTIPOINT > < / SPATIALFILTER > < / SPATIALQUERY > < / GET_FEATURES > < / REQUEST > < / ARCXML > ";string response = connection.Send(getfeatures_request, "Query");
Because ArcXML is based on the Extensible Markup Language (XML) standard, common XML processing tools and methods can be used to interrogate the ArcXML content. The following steps can be used to process an ArcXML response:
- Create an XML document.
- Load the ArcXML response into the document.
- Search on the ArcXML element or node.
- Search for an attribute value.
In the following code example, a SERVICES response is processed—GETCLIENTSERVICES is the ArcXML request. A typical SERVICES response would look similar to the this. In this example, two services are available: an Image Service named "world" and an ArcMap Image Service named "north_america".
[XML]
<?xml version="1.0"?>
<ARCXML version="1.1">
<RESPONSE>
<SERVICES>
<SERVICE
name="world"
servicegroup="ImageServer1"
access="PUBLIC"
type="ImageServer"
version=""
status="ENABLED">
<IMAGE type="PNG8"/>
<ENVIRONMENT>
<LOCALE country="US" language="en" variant=""/>
<UIFONT name="Arial"/>
</ENVIRONMENT>
<CLEANUP interval="20"/>
</SERVICE>
<SERVICE
name="north_america"
servicegroup="ImageServerArcMap1"
access="PUBLIC"
type="ImageServer"
version="ArcMap"
status="ENABLED">
<IMAGE type="PNG"/>
<CLEANUP interval="20"/>
</SERVICE>
</SERVICES>
</RESPONSE>
</ARCXML>
This response is loaded into an XML document. A reference to the System.XML namespace must be made to parse an XML document. The document is then searched for all SERVICE nodes. For each SERVICE node, a search is made for the name attribute value as shown in the following code:
[C#]
XmlDocument doc = new XmlDocument();
doc.LoadXml(response);
XmlElement root = doc.DocumentElement;
XmlNodeList nodelist = root.GetElementsByTagName("SERVICE");
foreach (XmlNode node in nodelist)
{
string name = node.Attributes["name"].InnerXml;
}