EDS Technical Reference Guide 9.1
EDS Technical Reference Guide 9.1
Due to a policy of continuous product development and refinement, TEOCO Ltd. (and its affiliates,
together “TEOCO”) reserves the right to alter the specifications, representation, descriptions and all
other matters outlined in this publication without prior notice. No part of this document, taken as a whole
or separately, shall be deemed to be part of any contract for a product or commitment of any kind.
Furthermore, this document is provided “As Is” and without any warranty.
This document is the property of TEOCO, which owns the sole and full rights including copyright.
TEOCO retains the sole property rights to all information contained in this document, and without the
written consent of TEOCO given by contract or otherwise in writing, the document must not be copied,
reprinted or reproduced in any manner or form, nor transmitted in any form or by any means: electronic,
mechanical, magnetic or otherwise, either wholly or in part.
The information herein is designated highly confidential and is subject to all restrictions in any law
regarding such matters and the relevant confidentiality and non-disclosure clauses or agreements
issued with TEOCO prior to or after the disclosure. All the information in this document is to be
safeguarded and all steps must be taken to prevent it from being disclosed to any person or entity other
than the direct entity that received it directly from TEOCO.
All other company, brand or product names are trademarks or service marks of their respective holders.
This is a legal notice and may not be removed or altered in any way.
Your feedback is important to us: The TEOCO Documentation team takes many measures in order
to ensure that our work is of the highest quality.
If you found errors or feel that information is missing, please send your Documentation-related feedback
to Documentation@teoco.com
Thank you,
Redistribution and use in source and binary forms, with or without modification, are permitted provided
that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and
the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions
and the following disclaimer in the documentation and/or other materials provided with the
distribution.
Neither the name of the author nor the names of its contributors may be used to endorse or
promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
Change History
This table shows the change history of this guide:
Table of Contents
1 About the ENTERPRISE Data Service ........................................................... 7
1.1 Data Types Supported within the EDS ...................................................... 7
1.2 Backwards Compatibility with Previously Released Data Types ............. 10
1.3 New Data Types Added to this Release (9.1) ......................................... 11
1.4 Data Types Deprecated in this Release (9.1).......................................... 12
1.5 Special Changes in this Release (9.1) .................................................... 14
1.5.1 New Flexible Hierarchy for Property, Node, Cell and Antennas ................... 14
1.5.2 Impersonate User .......................................................................................... 15
1.5.3 Fine-grain Inclusion and Exclusion of Response data .................................. 15
1.5.4 New Parameters for Antenna Indexes and Carrier Allocations ..................... 15
1.5.5 New Operation Attribute for Neighbour Type Objects ................................... 15
1.5.6 MU-Node and Cell Renaming ........................................................................ 16
1.5.7 Neighbour Reparenting ................................................................................. 16
1.6 Native Co-ordinate System Support ........................................................ 16
1.7 Limitations of the EDS ............................................................................ 17
5
EDS Technical Reference Guide 9.1
6
About the ENTERPRISE Data Service
The ENTERPRISE Data Service (EDS) is a web service which provides several interfaces for
accessing and manipulating data from a pre-existing ENTERPRISE deployment. Its architecture
consists of two middle-tier service layers which are able to access a single ENTERPRISE database:
Presentation Service – This service is responsible for communicating with the outside world and
offers either a traditional web service interface or a convenient REST interface for prototyping
queries or diagnosing faults.
Persistence Service – This service is responsible for processing work items from the
presentation service and interacting with the back-end Oracle database. The persistence service
may be clustered if large concurrent access to the service is required, but it should be noted that
each instance will create a 10 user connection pool to the Oracle server.
The two services are attached to each other using a duplexed pair of message queues which allows for
either single server or multiple server deployments.
Note: A single server configuration is the default setting, but you are still able to run concurrent
persistent instances from the same server as long as they are attached to the same presentation
service.
Note: For the complete list of EDS types, including those which have extensions from previous
releases, we recommend that you use the REST interface:
This table lists the major supported data types general to all products (ASSET and ASSET Backhaul*):
7
EDS Technical Reference Guide 9.1
This table lists the major supported data types specific to ASSET:
8
About the ENTERPRISE Data Service
Notes:
1. Delete support is deliberately prohibited on MSC, BSC and other indicated elements to prohibit
accidental removal of any attached GSM sites or configuration data. This restriction will be
removed in future release once EDS implements role based security.
2. As part of their definition, GSM Cells include Sub-Cells, Carrier Allocations, Antennas and other
equipment assignments. Refer to WSDL for more detail.
3. As part of their definition, NodeBs include UMTS Carrier assignments, Antennas and other
equipment assignments. Refer to WSDL for more detail.
4. As part of their definition, UMTS, LTE and Wi-Fi Cells include carrier, antenna and feeder
assignments, as well as other parameters. Refer to WSDL for more detail.
This table lists the major supported data types specific to ASSET Backhaul*:
9
EDS Technical Reference Guide 9.1
Logical Antennas are now part of the Property (LocationObject) instead of the individual Node
elements. In the context of backwards compatibility where a Legacy Node type is presented containing
a list of Logical Antennas, the list of Logical Antennas will be obtained via interrogation of its child Cells.
The Logical Index will no longer be unique to an instance of a Node.
For more information, see ‘Special Changes in this Release (9.1)’ on page 14.
There are some newly added data types for this release. See ‘New Data Types Added to this Release
(9.1)’ on page 11.
In order to maintain backwards compatibility with previously defined data types from earlier releases,
there are some deprecations. See ‘Data Types Deprecated in this Release (9.1)’ on page 12.
The following table may help to clarify the behaviour of the backwards compatibility:
Read Node (Any) < 9.1 Backwards compatibility will only show Logical Antennas that are
attached to Cells owned by Node (for GSM, see next row).
Only Feeders that are attached to Cells located on the same Property
as the Node will be visible.
Only Cells that are co-located on the same Property as the Node will
be visible.
It will still be possible to see all cells via the explicit EDS cell type.
Read Cell (GSM) < 9.1 Backwards compatibility will only show Logical Antennas that are
attached to Cell Layers.
Only Logical Antennas that are co-located on the same Property as
the GSM Cell will be visible (to prevent duplicate lists).
Create/ Cell (Any) < 9.1 Cell location will be the same as the parent node (MU-Node).
Update
New GSM Logical Antennas are permitted as long as the Logical
Index is unique to the Property of that Cell.
Updates to Logical Antennas are allowed and will be applied to the
appropriate Property.
Replace Logical Antennas/ < 9.1 Where EDS has been instructed to replace an Antenna or Feeder list
Feeders (Any) it will need to filter out any elements which are not co-located on the
same Property as the Node (or GSM cell). This is to protect the
database from accidental deletion of remote Antennas/Feeders by
legacy EDS types.
EDS will not be allowed to delete Logical Antennas via a legacy Node
or Cell type. Where a reference to a Cell Feeder is removed, it will be
detached from the Antenna, but the Logical Antenna will not be
affected.
Delete Cell (Any) < 9.1 Cell deletion should behave almost the same as it has done
previously. EDS will detach any references to remote Logical
Antennas.
GSM Cell deletion will remove cellular references to Logical
Antennas, but it will not delete remote Logical Antennas from the
Property.
10
About the ENTERPRISE Data Service
Replace Cell (Any) < 9.1 Where EDS has been instructed to replace a Cell list owned by a
given Node/CellSite, it will need to filter out any Cells which are not
co-located on the same Property as the Node (or GSM cell). This is
to protect the database from accidental deletion of remote Cells by
legacy EDS types.
Create/ Cell (Any) 9.1 EDS will validate the specified Property location for existence. If it is
Update not specified, the default will be the same as for the parent node.
Create/ Node (Any) <= 9.1 Node location functionality should remain unaffected. Any newly
Update created cells beneath the Node will implicitly share the same location
as the Node.
New Logical Antennas are permitted as long as the Logical Index is
unique to the Property of that Node.
11
EDS Technical Reference Guide 9.1
(In general, this applies to data types that were introduced before version 8.1 and that have had two or
more generations of evolution, or are unable to retain forwards compatibility with this release.)
ENTERPRISE Type Deprecated in 9.1 Oldest Supported Version from 9.1 onwards
AntennaPattern AntennaPatternv801
AntennaPatternv80 AntennaPatternv801
Band Bandv80
Bandv70 Bandv80
BSC BSCv80
BSCv70 BSCv80
BTSEquip BTSEquipv81
CellLayer CellLayerv70
CellSite CellSitev81
CellSitev70 CellSitev81
CellSitev80 CellSitev81
CellSitev801 CellSitev81
GSMCell GSMCellv81
GSMCellv70 GSMCellv81
GSMCellv80 GSMCellv81
GSMCellv801 GSMCellv81
GSMRepeater GSMRepeaterv81
GSMRepeaterv80 GSMRepeaterv81
LocationObjectHierarchy LocationObjectHierarchyv81
LocationObjectHierarchyv70 LocationObjectHierarchyv81
LocationObjectHierarchyv80 LocationObjectHierarchyv81
LocationObjectHierarchyv801 LocationObjectHierarchyv81
LocationObject LocationObjectv81
LocationObjectv70 LocationObjectv81
LocationObjectv80 LocationObjectv81
LocationObjectv801 LocationObjectv81
LTECell LTECellv81
LTECellv801 LTECellv81
LTENode LTENodev81
LTENodev80 LTENodev81
LTENodev801 LTENodev81
12
About the ENTERPRISE Data Service
ENTERPRISE Type Deprecated in 9.1 Oldest Supported Version from 9.1 onwards
LTERepeater LTERepeaterv81
LTERepeaterv80 LTERepeaterv81
MSC MSCv80
MSCv70 MSCv80
NodeB NodeBv81
NodeBv70 NodeBv81
NodeBv80 NodeBv81
NodeBv801 NodeBv81
TerminalTypeGSM_UMTS TerminalTypeGSM_UMTSv81
RadioEquip RadioEquipv80
RadioEquipv70 RadioEquipv80
RNC RNCv70
ServiceType Servicev81
TerminalType Terminalv81
UMTSCell UMTSCellv81
UMTSCellv70 UMTSCellv81
UMTSRepeater UMTSRepeaterv81
UMTSRepeaterv80 UMTSRepeaterv81
13
EDS Technical Reference Guide 9.1
1.5.1 New Flexible Hierarchy for Property, Node, Cell and Antennas
There are some significant changes in the ASSET 9.1 release. The transition to support for multiple-
technology nodes (MU-Node) is an example. (Some of this is already mentioned in Backwards
Compatibility with Previously Released Data Types on page 10.)
MU-Node: The MU-Node is a new network element that can contain cells of a single technology or cells
of multiple technologies. In effect, it subsumes the role of the Site/Node objects (such as BTS, Node B
or eNodeB) that were present prior to 9.1.
In other words, the MU-Node aggregates the various technology-specific sites/nodes into a single
object which has multi-technology capability. So, depending on which technologies you are using in
your project, you can decide whether you want:
The MU-Nodes to contain cells of a only one specific technology (this is known as Fixed)
- or -
The MU-Nodes to contain cells of any or all technologies (this is known as Variable)
Remote Cell Properties and Remote Cell Antennas: ASSET 9.1 allows for both Cells and Physical
Antennas to have a location (LocationObject) that is different to that of the logical MU-Node within the
hierarchy. This enables a physical separation of Node and Cell and also enables Cells to propagate
through Antennas from any Property.
This means that Logical Antennas are now stored as part of the Property (LocationObject).
Previously, they were stored as part of the cell-level object (for GSM), or the node-level object (for all
other technologies). In the context of backwards compatibility where a Legacy Node type is presented
containing a list of Logical Antennas, the list of Logical Antennas will be obtained via interrogation of its
child Cells. The Logical Index will no longer be unique to an instance of a Node.
For more information, see the What’s New section in the ENTERPRISE SUITE Help or the
ENTERPRISE Release Overview and Business Impacts document.
Also, by default, you cannot create any Remote Cell Properties and Remote Cell Antennas.
You can see these default settings in this section of the config file:
If you want to change any or all of these settings, you can edit this section of the config file according to
your requirements. If required, ‘allowFixed’ and ‘allowVariable’ can both be set to ‘true’.
14
About the ENTERPRISE Data Service
In the Persistence config file you can now turn ‘on’ and ‘off’ the ability to impersonate an ASSET User
and set the Default Impersonator User / Impersonation Group that you want the EDS Service to
Impersonate, this user must exist as a genuine ASSET User and be a member of the supplied Group.
If the supplied Impersonation Group does not exist or the supplied Impersonate User is not in the
Supplied Impersonation Group, an error message is issued and the service shuts down.
When Impersonate User is turned ‘on’ you can also impersonate a user at the time of Request, that is,
for each Update, Create and Delete request you send to EDS, you can also send a user name and this
will take precedence over the Impersonate User from the config file. Again, the user must be a valid
ASSET User and a member of the Impersonation Group defined in the config file.
Prior to this change, the only way to update the Cell’s outward Neighbour list via the NeighbourType
was to pass in the entire list of outward Neighbours for a Cell and EDS would determine the required
Inserts, Updates and Deletes by checking the differences with the original list of outward Neighbours.
This new 'Operation' attribute will allow a user to pass in a single Neighbour or a list of Neighbours and
specify if this list should be inserted, updated or deleted from the original list.
This provides a much cleaner and more efficient way of updating a Cell’s outward Neighbours.
The 'Operation' attribute is optional. If omitted, it the default action will be ‘Replace’ as explained above.
For an example of a Soap envelope using the new 'Operation' attribute, see Neighbour Type Objects:
‘Operation’ Attribute on page 73.
15
EDS Technical Reference Guide 9.1
For Nodes and Cells you simply need to supply a value in the ‘niid’ attribute prior to the update and the
object will be renamed under the current rule set.
The ‘niid’ attribute is listed in the table in Supported Attributes in Section 5.3.
For reparenting you simply need to supply an ‘niid’ on the NeighbourType and the ‘Operation’ attribute
must be set to “Update”.
The update will be rejected if the ‘niid’ is not found or if the ‘niid’ already has Neighbours attached.
The ‘niid’ attribute is listed in the table in Supported Attributes in Section 5.3.
Note: You need to choose which coordinate to supply to EDS when updating locations, and in the case
of the “stored” coordinate, you need to supply an appropriate EPSG code denoting which Geodetic or
Project system the coordinate uses.
This fragment from a GSM cell shows how the coordinates appear:
<gsm80:Antenna Index="1">
<gsm:AbsLocation EPSG="4269">
<Longitude>-97.74209949</Longitude>
<Latitude>30.27021592</Latitude>
</gsm:AbsLocation>
<gsm80:Location Relative="Relative" EPSG="0">
<X>1.051E-05</X>
<Y>8.92E-06</Y>
<Z>0</Z>
</gsm80:Location>
</gsm80:Antenna>
The “Location” element will contain the actual value that is stored within the database, and the
“AbsLocation” element will use this stored coordinate, and, depending whether it is absolute or relative,
perform the appropriate conversion to create an antenna location, including the location of the property.
When updating or creating antennas with EDS v80 types (or later), you must decide whether to specify
the AbsLocation or the Location. EDS will accept both, but the Location element will take precedence.
Note: A valid EPSG code must be supplied to EDS. The list of available EDS codes can be found at
http://spatialreference.org/ref/epsg/
16
About the ENTERPRISE Data Service
For information regarding EDS hardware and software requirements, please consult the latest Release
Notes.
17
EDS Technical Reference Guide 9.1
18
About the EDS Web Service Interface
(For a comparison between the two types, see ‘EDS “Basic” Service Contract Architecture’ on page 43.)
19
EDS Technical Reference Guide 9.1
http://{server}:{port}/Aircom/EDS/WS
netTCP://{ server}:8734/Aircom/EDS/TCP
http://{server}:8730/Aircom/EDS/WS?wsdl
The service contract uses a principle known as “operations as data”, and therefore the EDS only offers
four basic methods for data manipulation that all accept one parameter:
CREATE
UPDATE
QUERY
DELETE
Each request contains facets which describe the data to be queried or manipulated, as well as
additional metadata which controls how the service will behave in response to the request. For
example, the query request will contain metadata describing the query, as well as paging parameters to
indicate which part of the result set to return.
[OperationContract]
QueryResponseType Query(QueryRequestType data);
[OperationContract]
ModifyResponseType Modify(ModifyRequestType data);
[OperationContract]
DeleteResponseType Delete(DeleteRequestType data);
[OperationContract]
SupportedTypes QueryableTypes();
20
About the EDS Web Service Interface
[OperationContract]
SupportedTypes WriteableTypes();
[OperationContract]
SystemStatus Status();
[OperationContract]
HistoricalSystemStatus HistoricalStatus();
}
The four ancillary methods on the service contract perform the following:
QueryableTypes - returns an enumeration indicating all available data types within the EDS
WriteableTypes - a subset of the previous enumeration
Status & HistoricalStatus - used for performance monitoring
Each request operation shares a common request base type, and elements which are specific to that
operation.
This picture shows the hierarchy for these four request types:
Each request type has a unique ItemID used to correlate the message through the system, a collection
of sub-items which allow for batching of multiple data types within a single request, and, depending on
the operation, a ResultQuery which allows for the inclusion of a query or queries after the data
manipulation has completed.
21
EDS Technical Reference Guide 9.1
itemID GUID A unique identifier used to correlate the request through the
system between the service internal layers and the client.
TimeoutOverride Int The EDS is configured to timeout any request which takes
longer than 45 seconds to complete. This can occur when
the server is busy, or the request is complex and therefore
requires more time to process. By supplying a timeout value,
the presentation service will wait for the new interval, or until
it receives a response from the server.
Note: Client developers should be aware of this value, and
choose a suitable override if you anticipate that the request
will take longer than the default value.
Runsequentially bool By default EDS will run each request item in a separate
thread (up to 8). Setting this to true will instruct EDS to run
multiple request items in the same thread.
DeleteItems List<DeleteItemType> A collection of request items which allow for multiple objects
or object types to be deleted within a single request.
ModifyItems List<ModifyItemType> A collection of request items which allow for multiple types of
objects to be updated within a single request.
ResultQuery List<QueryItemBaseType> Once a modification or create request has completed, you
might want to request a dataset in order to save round trips.
2.1.3.1 RequestBaseType
The schema extract for RequestBaseType is:
<xs:complexType name="RequestBaseType" abstract="true">
<xs:complexContent mixed="false">
<xs:extension base="q1:EWSRequestBaseType"
xmlns:q1="http://www.aircominternational.com/contract/EWS/2011/01">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="TimeoutOverride" type="xs:int"/>
<xs:element minOccurs="0" maxOccurs="1" name="RunSequentially" type="xs:boolean"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
22
About the EDS Web Service Interface
2.1.3.2 CreateRequestType
The schema extract for CreateRequestType is:
<xs:complexType name="CreateRequestType">
<xs:complexContent mixed="false">
<xs:extension base="q1:RequestBaseType"
xmlns:q1="http://www.aircominternational.com/contract/EDS/DST/2009/10">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="CreateItems"
type="tns:CreateItemType"/>
<xs:element minOccurs="0" maxOccurs="unbounded" name="ResultQuery"
type="tns:QueryItemBaseType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.3.3 ModifyRequestType
The schema extract for ModifyTypeRequest is:
<xs:complexType name="ModifyRequestType">
<xs:complexContent mixed="false">
<xs:extension base="q2:RequestBaseType"
xmlns:q2="http://www.aircominternational.com/contract/EDS/DST/2009/10">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="ModifyItems"
type="tns:ModifyItemType"/>
<xs:element minOccurs="0" maxOccurs="unbounded" name="ResultQuery"
type="tns:QueryItemBaseType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.3.4 DeleteRequestType
The schema extract for DeleteRequestType is:
<xs:complexType name="DeleteRequestType">
<xs:complexContent mixed="false">
<xs:extension base="q15:RequestBaseType"
xmlns:q15="http://www.aircominternational.com/contract/EDS/DST/2009/10">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="DeleteItems"
type="tns:DeleteItemType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.3.5 QueryRequestType
The schema extract for QueryRequestType is:
<xs:complexType name="QueryRequestType">
<xs:complexContent mixed="false">
<xs:extension base="q16:RequestBaseType"
xmlns:q16="http://www.aircominternational.com/contract/EDS/DST/2009/10">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="QueryItems"
type="tns:QueryItemType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
23
EDS Technical Reference Guide 9.1
Note: The EDS will prohibit requests which ask for more than 500 rows of data within a single request,
therefore multiple request items may be used to return larger row sets through the use of pagination.
24
About the EDS Web Service Interface
The hierarchy of request items follows a similar pattern to that of their parent containing types. Each
request item contains its own common unique itemID to correlate the sub-request through the system;
however, their contract signature varies from that of the request in order to be more specific to the
operation they are representing. This table describes the properties illustrated in the picture:
itemID GUID A unique identifier used to correlate the request through the system
between the service internal layers and the client.
NewData AppDataType A collection whose type is defined by the objectType parameter which
represents the actual data being created or modified by the request.
Within this collection would be the actual telecoms specific data, such
as NodeBs, Sectors and so on.
objectType enum An enumeration of predefined values which indicate the supported
object types by the system.
Select QrySelectType A query indicating which objects to retrieve from the system by allowing
for parameter sets and simple predicate logic.
CreateIfNotFound bool A flag indicating that if a modification query (Select) does not retrieve a
value, the system will attempt to create the item instead.
count int Indicates that the query will return no more than a given number of
rows, which is useful for pagination requests.
Note: The maximum number of rows is 500.
offset int Allows you to request data from a different position within a rowset,
which is useful for pagination requests.
IgnoreQueryAndDoBul bool This parameter is used to instruct EDS to perform a batch update when
kUpdate supplied a block of data rather than use the query provided to locate
the record to be updated. Setting the parameter to true forces EDS to
use the IID and the BVID of the supplied object to find a match.
In other words, rather than requiring an EDS selection query to locate
data to update, EDS will implicitly use the dataset it has been handed
to locate the corresponding item within the database.
exclusion string A pipe (“|”) delimited string specifying sections of the EDS datatype to
ignore. This can be used to create more efficient fetches from the
service. For more information, see Query Result Inclusion and
Exclusion on page 33.
inclusion string A pipe (“|”) delimited string specifying sections of the EDS datatype to
include. This can be used to create more efficient fetches from the
service. For more information, see Query Result Inclusion and
Exclusion on page 33.
projection string Allows EDS to transform the result of one type into a custom output.
Currently this feature is not available.
SparseListUpdate bool Instructs EDS to preserve existing list entries if not included during an
UpdateRequest. Default behaviour is to replace.
FileItem FileItem Instructs EDS to look for a URI location to either read from or write to
depending on the request.
If a URI is supplied then an optional Impersonation item is available to
pass user credentials via as Impersonation property
Impersonation Impersonation Allows EDS to access a URI using these credentials. To access the
URI, a Domain name, User name and Password must be supplied that
has access to that URI
CreateNewAntennas bool For 9.1 Cell Types, the Logical Antenna is exposed on the Feeders
within the Cells. In previous versions you could set Logical Antenna
Index to ‘-1’ and the system would generate the next unique index.
In 9.1, this is still possible, but only if you pass in ‘CreateNewAntennas’
set to ‘true’. (For Create and Update requests.)
25
EDS Technical Reference Guide 9.1
ForceAntennaCreation bool In previous versions, if you tried to add a new Logical Antenna via a
OnConflict legacy (pre-9.1) Node/CellSite, and that new LogicalAntenna Index
already exists, then the update will fail, which prevents the original
Logical Antenna becoming accidentally overwritten.
In 9.1, if you do not know the correct new index you can pass in
‘ForceAntennaCreationOnConflict’ set to ‘true’, so that if the index
already exists, the system will generate the next unique index and add
the Logical Antenna. (This is for Create and Update requests only)
AddUnassignedCarrier bool In previous versions, when an LTE, UMTS and Wi-Fi Cell type is added
or updated and the Carrier that is selected in the Cell has not been
assigned to the Parent Node, then EDS will reject the transaction.
In 9.1, you can set ‘AddUnassignedCarrier’ to ‘true’, so that if the
Carrier specified is a valid Carrier, the Carrier will be allocated to the
Parent Node and the transaction will succeed. (This is for Create and
Update requests only.)
ImpersonateUser string Allows EDS to act as an ‘ASSET Logged-in User’. This relates to
Update, Create and Delete requests.
In the Persistence config file you can now turn ‘on’ and ‘off’ the ability
to impersonate an ASSET User and set the Default Impersonator User
/ Impersonation Group that you want the EDS Service to Impersonate,
this user must exist as a genuine ASSET User and be a member of the
supplied Group.
If the supplied Impersonation Group does not exist or the supplied
Impersonate User is not in the Supplied Impersonation Group, an error
message is issued and the service shuts down.
The default state for Impersonate User is ‘off’.
When Impersonate User is turned ‘on’ you can also impersonate a user
at the time of Request, that is, for each Update, Create and Delete
request you send to EDS, you can also send a user name and this will
take precedence over the Impersonate User from the config file. Again,
the user must be a valid ASSET User and a member of the
Impersonation Group defined in the config file.
2.1.5.1 DataItemBaseType
The schema extract for DataItemBaseType is:
<xs:complexType name="DataItemBaseType">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" ref="q5:itemID"
xmlns:q5="http://www.aircominternational.com/contract/Util/2009/10"/>
</xs:sequence>
</xs:complexType>
2.1.5.2 CreateItemType
The schema extract for CreateItemType is:
<xs:complexType name="CreateItemType">
<xs:complexContent mixed="false">
<xs:extension base="tns:DataItemBaseType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="NewData" type="tns:AppDataType"/>
</xs:sequence>
<xs:attribute ref="q8:objectType"
xmlns:q8="http://www.aircominternational.com/contract/EDS/DST/2009/10"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
26
About the EDS Web Service Interface
2.1.5.3 DeleteItemType
The schema extract for DeleteItemType is:
<xs:complexType name="DeleteItemType">
<xs:complexContent mixed="false">
<xs:extension base="tns:DataItemBaseType">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="objectType"
type="q11:QueryableTypes"
xmlns:q11="http://www.aircominternational.com/Schemas/Query/2009/09"/>
<xs:element minOccurs="0" maxOccurs="1" name="Select" type="q12:QrySelectType"
xmlns:q12="http://www.aircominternational.com/Schemas/Query/2009/09"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.5.4 QueryItemBaseType
The schema extract for QueryItemBaseType is:
<xs:complexType name="QueryItemBaseType">
<xs:complexContent mixed="false">
<xs:extension base="tns:DataItemBaseType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Select" type="q13:QrySelectType"
xmlns:q13="http://www.aircominternational.com/Schemas/Query/2009/09"/>
</xs:sequence>
<xs:attribute form="qualified" name="objectType" type="q14:QueryableTypes"
use="required" xmlns:q14="http://www.aircominternational.com/Schemas/Query/2009/09"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.5.5 QueryItemType
The schema extract for QueryItemType is:
<xs:complexType name="QueryItemType">
<xs:complexContent mixed="false">
<xs:extension base="tns:QueryItemBaseType">
<xs:attribute name="count" type="xs:int" use="required"/>
<xs:attribute name="offset" type="xs:int" use="required"/>
<xs:attribute name="projection" type="xs:string"/>
<xs:attribute name="exclusion" type="xs:string"/>
<xs:attribute name="inclusion" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.5.6 ModifyItemType
The schema extract for ModifyItemType is:
<xs:complexType name="ModifyItemType">
<xs:complexContent mixed="false">
<xs:extension base="tns:DataItemBaseType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Select" type="q3:QrySelectType"
xmlns:q3="http://www.aircominternational.com/Schemas/Query/2009/09"/>
<xs:element minOccurs="0" maxOccurs="1" name="NewData" type="tns:AppDataType"/>
</xs:sequence>
<xs:attribute form="qualified" name="objectType" type="q4:QueryableTypes"
use="required" xmlns:q4="http://www.aircominternational.com/Schemas/Query/2009/09"/>
<xs:attribute form="qualified" name="CreateIfNotFound" type="xs:boolean"
use="required"/>
<xs:attribute form="qualified" name="IgnoreQueryAndDoBulkUpdate" type="xs:boolean"
use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
27
EDS Technical Reference Guide 9.1
The RootEntityType describes the minimum amount of data which all supported elements must contain:
iid – Unique name of the element
bvid – Owning project of the element
eid – Internal DB key of the element
28
About the EDS Web Service Interface
29
EDS Technical Reference Guide 9.1
30
About the EDS Web Service Interface
31
EDS Technical Reference Guide 9.1
Note: For brevity, none of the derived types from RootEntityType are included.
2.1.7.1 AppDataType
The schema extract for AppDataType is:
<xs:complexType name="AppDataType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="AppData"
type="q9:RootEntityType"
xmlns:q9="http://www.aircominternational.com/Schemas/CommonTypes/2009/05"/>
</xs:sequence>
</xs:complexType>
2.1.7.2 RootEntityType
The schema extract for RootEntityType is:
<xs:complexType name="RootEntityType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="Security"
type="tns:SecurityInfo"/>
</xs:sequence>
<xs:attribute form="qualified" name="iid" type="xs:string"/>
<xs:attribute form="qualified" name="bvid" type="xs:string"/>
<xs:attribute form="qualified" name="eid" type="xs:int"/>
</xs:complexType>
The QrySelectType acts as a starting point to build a more complex query; however, there are three
types of query to choose from:
Simple text query (QrySimpleTextType) – This query uses a shorthand notation in order to build
complex queries. Internally, it produces the same result as a structured complex query, but
spares the client from using the schema structures to create the query. It is a more convenient
form to use; a text string is supplied for the query expression which a parser validates and the
expression tree is assembled.
Simple data type expression query (QryListElementType) – These are most convenient when
the client wishes to retrieve all contents from the host DB for a given type.
List type expression query (QrySimpleListType) – This allows the client to specify a list of iid’s
and bvid’s to the interface to retrieve.
Structured complex query (QryAndPredicateType, QryOrPredicateType) – These queries are a
composite tree of types which allow recursion to build a tree of rules in order to select data, and
invariably start with either an “And” or an “Or” expression type in order to begin the tree. It is also
possible to request a single attribute (QryAttributeBaseType) or user defined field
(QryUserDefinedFieldType) query using this approach. Despite the complexity of assembling
queries using this approach, all types, expressions and operations are backed by the Web
Service schema, thus preventing clients from choosing incorrect elements or expressions.
32
About the EDS Web Service Interface
This picture illustrates the different query types available and some of their relationships to indicate their
recursive nature:
Important: It is recommended to use this feature if you are bulk-fetching many rows of data from EDS.
2.1.10.1 ‘Include’
By specifying the include keyword (“inclusion”) on the service contract, EDS only selects the
elements you specify, or the prerequisite path to the elements if contained within a sub
component such as Cells or Antennas for example.
Any ‘Include’ instruction will take priority over an ‘Exclude’ instruction if both appear in the same
request.
Irrespective of the path(s) specified in an ‘Include’, EDS will always attempt to emit “iid” and
“bvid” attributes in the output data although it is possible to create “unusual” EDS output
configurations that may be rejected upon subsequent input of the same data back into EDS.
If an ‘Include’ fails to match any appropriate elements, EDS will output a minimal type containing
just the iid and bvid.
33
EDS Technical Reference Guide 9.1
2.1.10.2 ‘Exclude’
‘Exclude’ behaves in the opposite way to ‘Include’, because it only subtracts elements where a
matching path exists and thereby preserving the elements around it.
Most elements support both ‘Exclude’ and ‘Include’ whereas in the previous EDS releases only
“sub-list” groups such as Cells, Antennas or CustomFields were permitted.
It is possible to create invalid EDS configurations using ‘Exclude’ that may be rejected due to
validation failure if the same structure is used for subsequently performing an EDS ‘Create’ or
‘Update’.
2.1.10.3 Syntax
To use either feature, the client may simply name the element(s) they wish to include or exclude and
EDS will attempt to match them while assembling the result following a query. Multiple inclusions or
exclusions may be specified using the pipe "|" delimiter; sub-list exclusions are referenced using the "/".
The feature supports limited wildcards being present in the pattern as well as regular expressions:
To use a wildcard, the client may include an asterisk “*” as part of the pattern for example
“/Cells/*”. If the asterisk is omitted then the rule would not necessarily traverse to the descendent
parameters beneath each cell.
To specify a regular expression, the pattern must include angular braces around the expression
itself “{expr}”. It is still possible to separate multiple patterns using the pipe “|” delimiter.
Note: Regarding the usage of regular expressions, they are expressed literally against the path being
evaluated, not hierarchically (for instance where ‘Include’ will select ancestors on a path such as
/cells/feeders). This means that if a regular expression were “{a.*}” for example, it would select all
elements starting with “A” (case insensitive) at any level where it is permitted to traverse.
For best results with usage of this feature it is worth combining them with the more traditional syntax for
ease of use, for example “/cells/feeders/*|{a.*}”
34
About the EDS Web Service Interface
Important: The ‘Query Result Inclusion and Exclusion’ feature is available to all interfaces supported by
EDS (SOAP, REST, Loader). However, it is strongly recommended that you experiment with the syntax
using the REST interface for easiest visualisation of the result.
2.1.11.1 QryBaseType
The schema extract for QryBaseType is:
<xs:complexType name="QryBaseType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="OverrideCacheDefault">
<xs:complexType>
<xs:attribute default="false" name="UseQueryCache" type="xs:boolean"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
2.1.11.2 QrySelectType
The schema extract for QrySelectType is:
<xs:complexType name="QrySelectType">
<xs:complexContent mixed="false">
<xs:extension base="tns:QryBaseType">
<xs:sequence>
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element minOccurs="0" maxOccurs="1" name="Type"
type="tns:QryListElementType"/>
<xs:element minOccurs="0" maxOccurs="1" name="Not"
type="tns:QryNotPredicateType"/>
<xs:element minOccurs="0" maxOccurs="1" name="And"
type="tns:QryAndPredicateType"/>
<xs:element minOccurs="0" maxOccurs="1" name="Attribute"
type="tns:QryAttributeBaseType"/>
<xs:element minOccurs="0" maxOccurs="1" name="Extension"
type="tns:QryExtensionPredicateType"/>
<xs:element minOccurs="0" maxOccurs="1" name="Simple" type="tns:QrySimpleTextType"/>
<xs:element minOccurs="0" maxOccurs="1" name="Or" type="tns:QryOrPredicateType"/>
</xs:choice>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
35
EDS Technical Reference Guide 9.1
2.1.11.3 QrySimpleTextType
The schema extract for QrySimpleTextType is:
<xs:complexType name="QrySimpleTextType">
<xs:complexContent mixed="false">
<xs:extension base="tns:QryBaseType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Query" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.11.4 QryAttributeBaseType
The schema extract for QryAttributeBaseType is:
<xs:complexType name="QryAttributeBaseType">
<xs:complexContent mixed="false">
<xs:extension base="tns:QryBaseType">
<xs:attribute name="op" type="tns:QryOperationType" use="required"/>
<xs:attribute name="value" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.11.5 QryUserDefinedFieldType
The schema extract for QryUserDefinedFieldType is:
<xs:complexType name="QryUserDefinedFieldType">
<xs:complexContent mixed="false">
<xs:extension base="q1:QryBaseType"
xmlns:q1="http://www.aircominternational.com/Schemas/Query/2009/09">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="CustomFieldGroup"
type="xs:string"/>
<xs:element minOccurs="1" maxOccurs="1" form="unqualified" name="CustomFieldType"
type="tns:QryUserDefinedFieldGroupType"/>
</xs:sequence>
<xs:attribute name="name" type="tns:QryUserDefinedFieldAttributes" use="required"/>
<xs:attribute name="op" type="q1:QryOperationType" use="required"/>
<xs:attribute name="value" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.11.6 QryAndPredicateType
The schema extract for QryAndPredicateType is:
<xs:complexType name="QryAndPredicateType">
<xs:complexContent mixed="false">
<xs:extension base="tns:QryBaseType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="lhs" type="tns:QrySelectType"/>
<xs:element minOccurs="0" maxOccurs="1" name="rhs" type="tns:QrySelectType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
36
About the EDS Web Service Interface
2.1.11.7 QryOrPredicateType
The schema extract for QryOrPredicateType is:
<xs:complexType name="QryOrPredicateType">
<xs:complexContent mixed="false">
<xs:extension base="tns:QryBaseType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="lhs" type="tns:QrySelectType"/>
<xs:element minOccurs="0" maxOccurs="1" name="rhs" type="tns:QrySelectType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.11.8 QrySimpleListType
The schema extract for QrySimpleListType is:
<xs:complexType name="QrySimpleListType">
<xs:complexContent mixed="false">
<xs:extension base="tns:QryBaseType">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element minOccurs="0" maxOccurs="1" name="Item" type="tns:ListItemType"/>
<xs:element minOccurs="0" maxOccurs="1" name="NetworkItem" type="tns:ListNetworkItemType"/>
<xs:element minOccurs="0" maxOccurs="1" name="NbrItem" type="tns:ListNbrItemType"/>
</xs:choice>
</xs:sequence>
</xs:extension>
/xs:complexContent>
</xs:complexType>
37
EDS Technical Reference Guide 9.1
2.1.12 Responses
Each of the operations (Create, Query, Update, and Delete) must return a response meeting the
requirements of the request and embedded request items. Reciprocally, the structure of the response
contracts contains sub-elements in order to pair with the request items.
Additionally, each response will contain Status elements which indicate the overall and partial success
of the request; this element also includes any error detail raised by the service. This picture shows the
structure of the responses:
All four responses share a common base type of ResponseType, but the Create and Modify responses
are derived from a DataResponseType in order to support the ResultQuery if supplied by their request.
The QueryResponseType does not share this base as its collection, although through the Data property
will also indicate where the data has come from inside the rowset.
Note: The collection’s Data and ItemData are all essentially lists of AppDataType on page 28. The
DataType class provides an extension to this type by indicating from the query it was asked to execute
how many rows are remaining and where the next offset begins.
38
About the EDS Web Service Interface
itemIDRef GUID Matching ID to the request which the client supplied used to
correlate a request to a response.
2.1.13.1 ResponseType
The schema extract for ResponseType is:
<xs:complexType name="ResponseType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Status" type="tns:StatusType"/>
</xs:sequence>
<xs:attribute form="qualified" name="itemIDRef" type="q3:guid" use="required"
xmlns:q3="http://microsoft.com/wsdl/types/"/>
</xs:complexType>
2.1.13.2 DataResponseBaseType
The schema extract for DataResponseBaseType is:
<xs:complexType name="DataResponseBaseType">
<xs:complexContent mixed="false">
<xs:extension base="q3:ResponseType"
xmlns:q3="http://www.aircominternational.com/contract/Util/2009/10">
<xs:attribute name="timeStamp" type="xs:dateTime" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.13.3 DataResponseType
The schema extract for DataResponseType is:
<xs:complexType name="DataResponseType">
<xs:complexContent mixed="false">
<xs:extension base="q18:DataResponseBaseType" xmlns:q18="http://
www.aircominternational.com/contract/EDS/DST/2009/10">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="ItemData"
type="tns:ItemDataType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
39
EDS Technical Reference Guide 9.1
2.1.13.4 DeleteResponseType
The schema extract for DeleteResponseType is:
<xs:complexType name="DeleteResponseType">
<xs:complexContent mixed="false">
<xs:extension base="q19:ResponseType"
xmlns:q19="http://www.aircominternational.com/contract/Util/2009/10"/>
</xs:complexContent>
</xs:complexType>
2.1.13.5 CreateResponseType
The schema extract for CreateResponseType is:
<xs:complexType name="CreateResponseType">
<xs:complexContent mixed="false">
<xs:extension base="tns:DataResponseType"/>
</xs:complexContent>
</xs:complexType>
2.1.13.6 ModifyResponseType
The schema extract for ModifyResponseType is:
<xs:complexType name="ModifyResponseType">
<xs:complexContent mixed="false">
<xs:extension base="tns:DataResponseType"/>
</xs:complexContent>
</xs:complexType>
2.1.13.7 QueryResponseType
The schema extract for QueryResponseType is:
<xs:complexType name="QueryResponseType">
<xs:complexContent mixed="false">
<xs:extension base="q21:DataResponseBaseType"
xmlns:q21="http://www.aircominternational.com/contract/EDS/DST/2009/10">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Data" type="tns:DataType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.13.8 ItemDataType
The schema extract for ItemDataType is:
<xs:complexType name="ItemDataType">
<xs:complexContent mixed="false">
<xs:extension base="tns:AppDataType">
<xs:attribute ref="q10:itemIDRef"
xmlns:q10="http://www.aircominternational.com/contract/Util/2009/10"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
2.1.13.9 DataType
The schema extract for DataType is:
<xs:complexType name="DataType">
<xs:complexContent mixed="false">
<xs:extension base="tns:ItemDataType">
<xs:attribute name="remaining" type="xs:int" use="required"/>
<xs:attribute name="nextOffset" type="xs:int" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
40
About the EDS Web Service Interface
41
EDS Technical Reference Guide 9.1
refvalue GUID Matching id to the request which was supplied by the client. If this is the
outer StatusType, then the refvalue correlates to the Request itemID. If it
is an embedded status item it correlates to the RequestItem.
Code StatusCode An enumeration representing all possible values which the EDS might
return. The outer status item will always be one of these values:
OK - the request and all request items executed correctly
Partial - some of the request items failed to execute. Check the
embedded status responses
Failed - the request and all of its embedded items failed to execute.
Check the comments field for details
comment String A textual error message indicating more details regarding a failure.
StatusList List<StatusType> A collection of sub-status items used to correlate against individual
request items.
Its service contract architecture is almost identical to that of the “Strongly Typed” interface however it
does not supply data types describing the ENTERPRISE data model within its WSDL definition. This is
useful when you want to create a more minimal client integration, or whereby your client cannot
correctly handle the data type stubs necessary to use the typed interface. Furthermore effort has been
made to streamline the use of attribute, or external namespace declarations within the XML signature of
this interface to further simplify client interaction.
In place of requiring strongly typed data when serving requests, the EDS Basic interface uses an
opaque XML stream where ENTERPRISE element data is passed directly rather than using the code
classes produced by the WSDL as in the original service.
XML validation is done using the appropriate schema in the samples folder of the installed product.
The service contract uses a principle known “as operations as data”, and therefore the EDS only offers
four basic methods for data manipulation that all accept one parameter:
CREATE
UPDATE
QUERY
DELETE
Each request contains facets which describe the data to be queried or manipulated, as well as
additional metadata which controls how the service will behave in response to the request. For
example, the query request will contain metadata describing the query, as well as paging parameters to
indicate which part of the result set to return.
43
EDS Technical Reference Guide 9.1
[OperationContract]
BasicQueryResponseType Query (BasicQueryRequestType data);
[OperationContract]
BasicModifyResponseType Modify (BasicModifyRequestType data);
[OperationContract]
[OperationContract]
SupportedTypes QueryableTypes ();
[OperationContract]
SupportedTypes WriteableTypes ();
}
The two ancillary methods on the service contract perform the following:
QueryableTypes - returns an enumeration indicating all available data types within the EDS
WriteableTypes - a subset of the previous enumeration
44
About the EDS Web Service Interface
Each request operation shares a common request base type, and elements which are specific to that
operation.
Each request type has a unique ItemID used to correlate the message through the system, a collection
of sub-items which allow for batching of multiple data types within a single request, and, depending on
the operation, a ResultQuery which allows for the inclusion of a query or queries after the data
manipulation has completed.
In all other respects, the information is the same as for EDS “Strongly Typed” Web Service Interface in
Section 2.1 on page 20.
45
EDS Technical Reference Guide 9.1
46
Batch Processing via the EDS Web Service Interface
To make processing or large datasets within the EDS Web Service Interface more efficient, three
features have been added:
RunSequentially – Instructs EDS to execute all “requestitems”, within a single request serially
rather than concurrently.
FileItem – Request from EDS an XML file containing your data.
InputFile – Supply EDS with an XML file containing your data.
Note: You will need to set an appropriate timeout to correctly use these features;. As you are potentially
providing EDS with more data to process, you will need to set a larger interval. You may also need to
structure the size of the data volume more appropriately to ensure continuous throughput without
timeout.
3.1.1.1 RunSequentially
“RunSequentially” is a new optional parameter that allows the user to specify that all operations
contained within a single “request” take place in the same thread. By default EDS will run up to 10
threads to process data throughput. Each ModifyItems, CreateItems, DeleteItems and QueryItems entry
will usually run within a different thread. For example, if a large request contains 50 ModifyItems then
they will be spread across all threads to attempt to speed the data throughput. This is not necessarily a
good way to utilise EDS depending on your server configuration, as it may cause unnecessary
database thrashing while each thread competes for database access.
Setting RunSequentially to true will force EDS to run each of the ModifyItems requests consecutively in
the same thread.
This means that a user can pass different types of data in a single request and ensure the order in
which they are processed, such as adding LocationObjectTypes before CellSiteTypes, and
CellSiteTypes before GSMCellTypes.
3.1.1.2 FileItem
This can only be used for QueryItems and is used to write large datasets to a passed in directory
location to receive the XML data rather than stream its entire payload XML via its interface.
Note: The URI element must be a fully qualified path to a directory; a filename should not be passed.
47
EDS Technical Reference Guide 9.1
3.1.1.3 InputFile
This can only be used for DeleteItems and is used to read large datasets from a passed in file location
to read the XML data from rather than stream its entire payload XML via its interface.
<ns:DeleteItems>
<ns1:itemID>D7B970A6-E0A4-4782-973D-3835AE656F77</ns1:itemID>
<ns:objectType>LocationObjectType</ns:objectType>
<ns:Select>
<ns4:InputFile>
<ns4:URI>\\MyServer\MyShare</ns4:URI>
<ns4:Impersonate>
<ns4:Domain>adomain </ns4:Domain>
<ns4:User>user</ns4:User>
<ns4:Password>password</ns4:Password>
</ns4:Impersonate>
</ns4:InputFile>
</ns:Select>
</ns:DeleteItems>
The URI element is either a fully qualified path to an EDS XML file, or a fully qualified path to a directory
containing one or more EDS XML files.
If a single file has been supplied then EDS will process just that file, but if a directory has been supplied
then all files of .XML type will be processed from that directory.
For both FileItem and InputFile the URI is followed by an Impersonate element containing Domain,
User and Password.
This is used when the application does not have access to a file or directory, like a file on a server, in
which case a valid domain name, user name and password must be supplied that has access to that
file/directory.
This file processing method can be used on QueryItems via FileItem element, DeleteItems via the
InputFile element and ModifyItems and CreateItems within the FileLoadType (as described in the
next section).
Security Note: By default the EDS SOAP and REST interfaces are using an unencrypted HTTP
socket for transmission of data. If you plan on sending access credentials to EDS in order to manipulate
files you should consider configuring EDS to use HTTPS transport level encryption. Alternatively you
can grant the EDS “Presentation Service” component permission to access a remote file location via
your Windows application server using the “Service (services.msc)” control panel. If you would like
more information on using either method of securely file access then please contact Support.
48
Batch Processing via the EDS Web Service Interface
3.1.1.4 FileLoadType
A new “dummy” object type called FileLoadType has been created as a means of passing a URI (file
path) to the persistence service. This makes passing large amounts of XML data more efficient as the
payload only contains a few hundred bytes, and can resemble the following:
This type is ignored by the other operations and cannot be queried or deleted, it is only available to the
ModifyItem and the CreateItem request types.
The FileLoadType uses another new query item, FileItem as described above.
In this example the LocationObjectType has been specified as the objectType, which instructs EDS to
only process objects of this type. So if a directory is supplied, EDS will read all .XML files but will only
process objects of supplied type and ignore any others. So if you supply an objectType of
LocationObjectv81Type but then supply a file containing LocationObjectTypes then the
LocationObjectTypes will be ignored.
Attributes:
IgnoreQueryAndDoBulkUpdate="?":
IgnoreQueryAndDoBulkUpdate=”false” is not a valid option as this is a bulk update and setting this to
false will result in an error.
bvid=”?”:
If bvid is supplied then all of the eids (object’s DB key) will be removed from the input and the project
will be replaced with bvid specified project (the same functionality as the EDS loader).
49
EDS Technical Reference Guide 9.1
50
About the EDS REST Interface
The REST interface on the EDS is a lightweight means of testing or debugging issues with the service;
however, it can also be used for application development. The only other significant difference is that
whilst the EDS Web Service interfaces use a buffered MTOM over the wire format for efficiency, the
REST interface will always return plain text XML.
Note: The REST interface only supports GET requests; no data can be posted back to it.
All commands are expressed over the URL as query string parameters, with the exception of the object
type which forms part of the URI.
The signature of the REST requests supported by the EDS looks like this example:
http://{server}:{port}/Aircom/EDS/REST/{type}/?qry={query}&row={row}&max={max}&export={export}
&timeout={TimeoutOverride}&cache={OverrideCache}&exclude={sub-elements}&include={sub-elements}
Parameter Description.
Qry A query string which supports the simplified text-based query notation.
Row Starting position for the EDS to fetch data from within the rowset returned by the query.
Max Maximum number of rows returned in a single request. The EDS default is set to 10.
Export You can optionally export the result to a disk location rather than passing it directly back to the
client.
Timeout An override to the default 45 second timeout within the EDS
Cache Instructs the EDS not to use object caching. This is useful when you want the most up-to-date
copy, otherwise this could cause a negative performance hit.
Exclude Instructs EDS to ignore certain sub-elements within the specified type. This is useful for
creating sparse data, which can significantly improve performance.
Include Instructs EDS to include only certain sub-elements within the specified type. This is useful for
creating sparse data, which can significantly improve performance.
Note: If you do not supply any query parameters, the EDS will return the first 10 rows of data for the
indicated type within the URI.
51
EDS Technical Reference Guide 9.1
Note: The result set does not remove the containing query response or status of the request.
52
EDS Simplified Query Notation
Queries to the EDS can be created either by using a structured XML document describing the query, or
by using a simplified freeform text format. This section describes the keywords which can be used to
interact with this format.
All queries are performed against a supported data type and you cannot query over multiple types
within the same request to the Web Service. Freeform queries follow the following basic syntax and
rules:
Note: Within the API "type" is specified using a parameterised value which is specific to the interface. It
has been included here to aid explanation of the freeform text query language.
Where "type" would be a GSM cell and the query is looking for a matching element with an ID of
"TestID".
Queries can also be combined using a predicate to offer combination of attribute queries. Brackets can
also be used to indicate in which order of precedence the query should be evaluated:
For example:
Note: This query expands on the first example by restricting the search to include a specific
ENTERPRISE project.
53
EDS Technical Reference Guide 9.1
Since EDS 8.1, the following enhancements to its query syntax have been introduced:
Users may now create queries where the value of an expression is not equal, for example:
EDS will now search the contents of strings for a given string, for example:
EDS will now support regular expression queries against string types. Internally this maps onto the
Oracle "REGEX_LIKE" function, a description of which can be found here:
http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm#i1011021
For example:
54
EDS Simplified Query Notation
Code updated to allow for new subquery syntax to exist on specific elements GSMCellv90 (subcells),
CellSitev90 (cells), LTENodev90 (cells), NodeBv90Type (cells), AntennaDeviceType (patterns). New
keyword allows parent node to be retrieved based on existence of child attribute. For example:
Note: This feature should only be used when you know there are only a few affected elements
otherwise database performance may struggle.
Operation Description
= Logical equals
eq Logical equals
neq Not equal
!= Not equal
> Greater than
gt Greater than
>= Greater than or equal
gte Greater than or equal
< Less than
<= Less than or equal
lte Less than or equal
ieq Case sensitive equals
st Starts with
end End with
regex Regular expression over string types
not Negate a given expression
contains Looks for a substring within a string
exists Subquery expression – please see Item 5 in Query Enhancements in Recent Releases
on page 54.
55
EDS Technical Reference Guide 9.1
56
EDS Simplified Query Notation
Cells* Allows subquery of all child cells MUNode, CellSite, LTE Node,
NodeB, WiFiNode
* When the subquery field
for a child cell is non-unique
(such as ModifyDate), the
attributes below (GSMCells,
WIFICells, UMTSCells,
LTECells) can be used to
force the subquery to only
consider that technology
type.
GSMCells Allows subquery of all child GSM cells MUNode
WIFICells Allows subquery of all child Wi-Fi cells MUNode
UMTSCells Allows subquery of all child UMTS cells MUNode
LTECells Allows subquery of all child LTE cells MUNode
SubCells Allows subquery of all child subcells GSM Cell
57
EDS Technical Reference Guide 9.1
58
EDS Simplified Query Notation
udf:["{group}"]<operation> <value>
The keyword udf: is used to tell the freeform query what it should expect as field group within the
square brackets. The group name must be presented inside speech marks.
For example:
Where "Type" would be a GSM Cell and the query is looking for a matching element whose Site Status
field has been set to On Air.
59
EDS Technical Reference Guide 9.1
The syntax to specify the data type within the query is as follows:
Where:
i = integer
p = pick-list
s = string
b = boolean
f = float
You can choose one of the letters in the bracketed list applicable to the UDF type, so for example:
60
Diagnosing Faults and Performance Monitoring
There are several ways to diagnose problems or faults, and also to monitor the performance of the
EDS. This section explains the various ways to do this.
In addition, the EDS uses the Microsoft Enterprise Library Logging Block for filtering and forwarding
faults or other diagnostic information onto a number of subscribed listeners. It is possible to add new
listeners to the EDS configuration through modification of the application's .config file. In this way, it
would be possible to include a listener which forwards serious faults to a specified e-mail address.
Note: The EDS application bundle includes a Microsoft Enterprise Library config editor to allow
administrators to alter the configuration of these logs. For more information, see the EWS Web
Administration and User Guide.
If the EDS raises an unhandled fault or exception, its services will attempt to continue normal operation.
Most faults or exceptions are based around validation failure, or at the worst a rejection from the Oracle
server due to, for example, constraint violation. In all of these circumstances, the EDS will log the failure
and continue normal operation.
Where <user>, <password> and <oracle_service> may be substituted by the appropriate values.
Notes:
If you want to perform an EDS database installation, you must supply either the ENTERPRISE
administrator account or another user ID capable of updating the database schema
(NETWORK_PLANNING)
If the details you have entered are correct, EDS will begin updating the database and present the
changes it makes to the console as well as appending them to the “installdb.log” file
61
EDS Technical Reference Guide 9.1
TEOCO.EDS.Persistence.Runtime.exe.config
TEOCO.EDS.Presentation.Runtime.exe.config
TEOCO.ENS.Runtime.exe.config
1. Back up each of the config files before performing this process. If this is not done correctly, the
services will not start.
2. Open one of the config files and locate the xml section named “database-login-configuration”.
The encrypted section will look like this example:
<database-login-configuration
configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAZICI6NQKaEy0QPHVA8+Ubg
QAAAACAAAAAAADZgAAwAAAABAAAADlyoeQ6pOkoVhext6s/DJBAAAAAASAAACgAAAAE
AAAAG03swS/6fPPBRqeFeeT0wm4AAAABNJBm1UADlCuqJ5THBuHn+IJKsTdEp/p7JwJ
CBF8s3w8wKvPHKwPR4jly8fcvaWcaCtzpbUd3IkCCMhT4RhsWsooTQQ6MDdyXKeJwRq
5jxNaN0jU5AaRt7zHn7LhSgip4rrTHjzzptRiCrhjYuJGX7Ljra2qnwwZbzEGMg48tA
MAdf0heg+Mw+S08WjbMP/4VGFmcmwUGRJ7hhxSX9TfAwT6AoYf8CWqRDS4SdG4u+b6L
tyMZxR52hQAAAAuf1cTv5fNJDAMwJK6LTKn3hpjRQ==</CipherValue>
</CipherData>
</EncryptedData>
</database-login-configuration>
3. Once you have located the correct section, replace the entire xml element with the following
XML.
Note: Substitute “EDSDB” and “password” with the appropriate Oracle SID and password
for the “EDS_SOA_Client” account.
<database-login-configuration name="EDSDB" username="EDS_SOA_Client"
password="password">
</database-login-configuration>
5. To re-encrypt the connection string, type the following from the command line:
TEOCO.EDS.Persistence.Runtime.exe -encrypt database-login-configuration
TEOCO.EDS.Presentation.Runtime.exe -encrypt database-login-configuration
TEOCO.ENS.Runtime.exe -encrypt database-login-configuration
62
Diagnosing Faults and Performance Monitoring
Machine Name General The name of the server hosting the EDS.
Process Name General The name of the server process.
Process ID General The server process ID.
NonpagedSystemMemory General The amount of non-paged system memory.
PagedMemorySize General The amount of paged memory.
PeakPagedMemorySize General The peak amount of paged memory.
PeakVirtualMemorySize General The peak amount of virtual memory.
PeakWorkingSet General The working set size of the process.
InstanceName General Indicates whether the EDS is running as a stand-alone
program or as a windows cluster.
NumberOfMessagesReceived Create, Update, Indicates how many messages the service has received.
Query, Delete
NumberOfSuccessMessagesSent Create, Update, The number of success messages sent.
Query, Delete
NumberOfFailureMessagesSent Create, Update, The number of failure messages. These could be for
Query, Delete failure of validation criteria, for example.
NumberOfExceptionMessagesSent Create, Update, Number of serious errors, which should be monitored, as
Query, Delete they might reflect a more serious issue with the system.
MinimumTimeForProcessMessage Create, Update, The minimum amount of time the EDS took to handle a
Query, Delete request.
AverageTimeForProcessingMessage Create, Update, The longest time it too the EDS to answer a request.
Query, Delete
63
EDS Technical Reference Guide 9.1
http://{host} : {port}/Aircom/EDS/REST/status/
Note: There will be one "item" per EDS persistent service instance.
64
Diagnosing Faults and Performance Monitoring
Note: Both of these operations return the same content, however the historical status operation can be
used to build graphs based on a period of time. The historical status collects up to 15 snapshots of
data. This picture shows an example:
65
EDS Technical Reference Guide 9.1
For more information, see the EWS Web Administration and User Guide.
66
EDS Request Response Samples
67
EDS Technical Reference Guide 9.1
The example shows a simple request which creates three minimal NodeB types. The request has
defined an itemID for both the other RequestType and the contained RequestItem. The response from
the EDS looks like this:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Action s:mustUnderstand="1"
xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.aircominternational.co
m/contract/EDS/2009/05/EDS/CreateResponse</Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CreateResponse xmlns="http://www.aircominternational.com/contract/EDS/2009/05">
<CreateResult d4p1:itemIDRef="88384db3-e9dc-411b-b34a-27f389bc79fd" timeStamp="2010-03-
17T19:37:55.0813608+00:00" xmlns:d4p1="http://www.aircominternational.com/contract/Util/2009/10">
<d4p1:Status code="OK" ref="88384db3-e9dc-411b-b34a-27f389bc79fd">
<d4p1:Status code="OK" ref="7d297283-f9b9-497e-8299-593439da9a40" />
</d4p1:Status>
</CreateResult>
</CreateResponse>
</s:Body>
</s:Envelope>
Note: If you were to create the same three NodeBs again, the EDS would return an error, shown in this
example:
<CreateResponse xmlns="http://www.aircominternational.com/contract/EDS/2009/05">
<CreateResult d4p1:itemIDRef="e9821e0f-5b2a-43cd-841f-64849b578ef9" timeStamp="2010-03-
17T19:41:26.705465+00:00" xmlns:d4p1="http://www.aircominternational.com/contract/Util/2009/10">
<d4p1:Status code="Failed" ref="e9821e0f-5b2a-43cd-841f-64849b578ef9">
<d4p1:Status code="InvalidData" ref="eff48a14-224a-4fcd-ac30-2b8a1aab6e5c" comment="Object
ID:NodeBA, Key:1018 has failed validation : ObjectName 'NodeBA' is not unique (ObjectName must be
unique within the DB), 'ObjectName': NodeBAObject ID:NodeBB, Key:1019 has failed validation :
ObjectName 'NodeBB' is not unique (ObjectName must be unique within the DB), 'ObjectName':
NodeBBObject ID:NodeBC, Key:1020 has failed validation : ObjectName 'NodeBC' is not unique
(ObjectName must be unique within the DB), 'ObjectName': NodeBC" />
</d4p1:Status>
</CreateResult>
</CreateResponse>
68
EDS Request Response Samples
An example of an update to the same three NodeBs used in the previous example is:
<Modify xmlns="http://www.aircominternational.com/contract/EDS/2009/05">
<data>
<itemID xmlns="http://www.aircominternational.com/contract/Util/2009/10">a1ae6454-c251-455c-
8e77-2c5ab3af2da2</itemID>
<TimeoutOverride
xmlns="http://www.aircominternational.com/contract/EDS/DST/2009/10">0</TimeoutOverride>
<RunSequentially
xmlns="http://www.aircominternational.com/contract/EDS/DST/2009/10">false</RunSequentially>
<ModifyItems a:objectType="NodeBType" a:CreateIfNotFound="false"
xmlns:a="http://www.aircominternational.com/contract/EDS/2009/05">
<itemID xmlns="http://www.aircominternational.com/contract/Util/2009/10">8c89c01a-20bc-452f-
89c2-de79478aafca</itemID>
<a:Select>
<OverrideCacheDefault UseQueryCache="true"
xmlns="http://www.aircominternational.com/Schemas/Query/2009/09"></OverrideCacheDefault>
<Simple xmlns="http://www.aircominternational.com/Schemas/Query/2009/09">
<Query>iid="NodeBA" and bvid="Northeast"</Query>
</Simple>
</a:Select>
<a:NewData>
<a:AppData xsi:type="q1:NodeBType" b:iid="NodeBA" b:bvid="Northeast"
xmlns:b="http://www.aircominternational.com/Schemas/CommonTypes/2009/05"
xmlns:q1="http://www.aircominternational.com/Schemas/UMTS/2009/05">
<Location b:iid="4DET391B" xmlns=""></Location>
<q1:NodeBID>-1</q1:NodeBID>
<q1:NodeBEquipmentType b:iid="Node B with TMA"></q1:NodeBEquipmentType>
<q1:PLMN b:iid="PLMN0"></q1:PLMN>
<q1:AllowedOperations>ReadWrite</q1:AllowedOperations>
</a:AppData>
</a:NewData>
</ModifyItems>
<ModifyItems a:objectType="NodeBType" a:CreateIfNotFound="false"
xmlns:a="http://www.aircominternational.com/contract/EDS/2009/05">
<itemID xmlns="http://www.aircominternational.com/contract/Util/2009/10">7c9e1c57-cf73-415b-
9150-8ebc32147981</itemID>
<a:Select>
<OverrideCacheDefault UseQueryCache="true"
xmlns="http://www.aircominternational.com/Schemas/Query/2009/09"></OverrideCacheDefault>
<Simple xmlns="http://www.aircominternational.com/Schemas/Query/2009/09">
<Query>iid="NodeBB" and bvid="Northeast"</Query>
</Simple>
</a:Select>
<a:NewData>
<a:AppData xsi:type="q2:NodeBType" b:iid="NodeBB" b:bvid="Northeast"
xmlns:b="http://www.aircominternational.com/Schemas/CommonTypes/2009/05"
xmlns:q2="http://www.aircominternational.com/Schemas/UMTS/2009/05">
<Location b:iid="4DET391B" xmlns=""></Location>
<q2:NodeBID>-1</q2:NodeBID>
<q2:NodeBEquipmentType b:iid="Node B with TMA"></q2:NodeBEquipmentType>
<q2:PLMN b:iid="PLMN0"></q2:PLMN>
<q2:AllowedOperations>ReadWrite</q2:AllowedOperations>
</a:AppData>
</a:NewData>
</ModifyItems>
<ModifyItems a:objectType="NodeBType" a:CreateIfNotFound="false"
xmlns:a="http://www.aircominternational.com/contract/EDS/2009/05">
<itemID xmlns="http://www.aircominternational.com/contract/Util/2009/10">e9995793-ce1e-4d30-
9b24-3a0ee901dea9</itemID>
<a:Select>
<OverrideCacheDefault UseQueryCache="true"
xmlns="http://www.aircominternational.com/Schemas/Query/2009/09"></OverrideCacheDefault>
<Simple xmlns="http://www.aircominternational.com/Schemas/Query/2009/09">
<Query>iid="NodeBC" and bvid="Northeast"</Query>
</Simple>
</a:Select>
<a:NewData>
<a:AppData xsi:type="q3:NodeBType" b:iid="NodeBC" b:bvid="Northeast"
xmlns:b="http://www.aircominternational.com/Schemas/CommonTypes/2009/05"
69
EDS Technical Reference Guide 9.1
xmlns:q3="http://www.aircominternational.com/Schemas/UMTS/2009/05">
<Location b:iid="4DET391B" xmlns=""></Location>
<q3:NodeBID>-1</q3:NodeBID>
<q3:NodeBEquipmentType b:iid="Node B with TMA"></q3:NodeBEquipmentType>
<q3:PLMN b:iid="PLMN0"></q3:PLMN>
<q3:AllowedOperations>ReadWrite</q3:AllowedOperations>
</a:AppData>
</a:NewData>
</ModifyItems>
</data>
</Modify>
Note: In this example, multiple ModifyItems as a ModifyItem may only update a single item at a time
based on the restrictions of the query, which is necessary to correlate to the query (Select element).
The query is using the simple free-text notation.
Note: The query expression will select a single NodeB named "nodeba" using a case sensitive “ieq”
match, and will delete it and its dependencies, if any.
70
EDS Request Response Samples
The query expression is selecting all NodeBs whose name starts with (st) “NodeB”.
If you wish, you can further refine the search criteria to NodeB objects that have been modified within a
date and time range.
71
EDS Technical Reference Guide 9.1
72
EDS Request Response Samples
<soapenv:Envelope >
<soapenv:Body>
<ns:Modify>
<ns:data>
<ns1:itemID>A1B970A6-E0A4-4782-973D-3835AE656F92</ns1:itemID>
<ns2:masterID>B1B970A6-E0A4-4782-973D-3835AE656F93</ns2:masterID>
<ns3:TimeoutOverride>300</ns3:TimeoutOverride>
<ns3:RunSequentially>false</ns3:RunSequentially>
<ns:ModifyItems ns:objectType="NeighbourType"
ns:SuppressLogicaltoPhysicalAntennaCorrection="true" ns:SparseListUpdate="true"
ns:CreateIfNotFound="false" ns:IgnoreQueryAndDoBulkUpdate="true">
<ns1:itemID>A1B970A6-E0A4-4782-973D-3835AE656F91</ns1:itemID>
<ns:Select>
<ns5:OverrideCacheDefault UseQueryCache="false"/>
</ns:Select>
<ns:NewData>
<ns4:AppData xsi:type="ns12:NeighbourType" Operation="Delete" Technology="LTE"
ns14:iid="eNodeB2B" ns14:bvid="Bob" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns12:OutwardNbrs CarrierID="1" NbrCellID="CDMABS0A" Technology="CDMA">
<ns12:NbrCarrierID>1</ns12:NbrCarrierID>
</ns12:OutwardNbrs>
<ns12:AllowedOperations>ReadUpdateDelete</ns12:AllowedOperations>
</ns4:AppData>
</ns:NewData>
</ns:ModifyItems>
<ns:ModifyItems ns:objectType="NeighbourType"
ns:SuppressLogicaltoPhysicalAntennaCorrection="true" ns:SparseListUpdate="true"
ns:CreateIfNotFound="false" ns:IgnoreQueryAndDoBulkUpdate="true">
<ns1:itemID>A1B970A6-E0A4-4782-973D-3835AE656F92</ns1:itemID>
<ns:Select>
<ns5:OverrideCacheDefault UseQueryCache="false"/>
</ns:Select>
<ns:NewData>
<ns4:AppData xsi:type="ns12:NeighbourType" Operation="Create" Technology="LTE"
ns14:iid="eNodeB2B" ns14:bvid="Bob" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns12:OutwardNbrs CarrierID="1" NbrCellID="CDMABS0A" Technology="CDMA">
<ns12:NbrCarrierID>1</ns12:NbrCarrierID>
<ns12:Status>Live</ns12:Status>
</ns12:OutwardNbrs>
<ns12:AllowedOperations>ReadUpdateDelete</ns12:AllowedOperations>
</ns4:AppData>
</ns:NewData>
</ns:ModifyItems>
<ns:ModifyItems ns:objectType="NeighbourType"
ns:SuppressLogicaltoPhysicalAntennaCorrection="true" ns:SparseListUpdate="true"
ns:CreateIfNotFound="false" ns:IgnoreQueryAndDoBulkUpdate="true">
<ns1:itemID>A1B970A6-E0A4-4782-973D-3835AE656F93</ns1:itemID>
<ns:Select>
<ns5:OverrideCacheDefault UseQueryCache="false"/>
</ns:Select>
<ns:NewData>
<ns4:AppData xsi:type="ns12:NeighbourType" Operation="Update" Technology="LTE"
ns14:iid="eNodeB2B" ns14:bvid="Bob" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns12:OutwardNbrs CarrierID="1" NbrCellID="CDMABS0A" Technology="CDMA">
<ns12:NbrCarrierID>1</ns12:NbrCarrierID>
<ns12:Status>Planned</ns12:Status>
</ns12:OutwardNbrs>
<ns12:AllowedOperations>ReadUpdateDelete</ns12:AllowedOperations>
</ns4:AppData>
</ns:NewData>
</ns:ModifyItems>
</ns:data>
</ns:Modify>
</soapenv:Body>
73
EDS Technical Reference Guide 9.1
74
Securing EDS with HTTPS
8.1 Introduction
This chapter outlines how to secure a given EDS instance with a pair of HTTPS certificates (client and
server), signed by a trusted root authority. When EDS is running HTTPS, a client must issue a defined
certificate public key to the server and the server must be aware of the client key’s existence in its local
certificate store. If the server rejects the client credentials, it will issue an HTTP 403 header in response
to the client and terminate the connection.
For the purposes of this document, the examples will be based on self-signed certificates. However, in
a production environment, it is highly recommended to use certificates issued by a recognized root
authority, either provided via your organization’s network administrators or via a trusted 3rd party
provider.
Please note that TEOCO will not be responsible for generating or issuing certificates to customers.
The examples focus on adding HTTPS support to the following ports and endpoints:
8732 – EDS HTTP SOAP
8730 – EDS WSDL
8632 – EDS (Basic) HTTP SOAP
8630 – EDS (Basic) WSDL
To create self-signed certificates, you will need access to the following utilities:
MakeCert.exe
pvk2pfx.exe
These utilities are available as part of the Microsoft Platform SDK (or any Visual Studio Distribution).
Alternatively, Appendix 3 at the end of this chapter has an example Powershell 4.0 script that can
create the necessary self-signed certificates and install them on your server.
Please note that this it is beyond the scope of this document to provide guidance on using this script.
75
EDS Technical Reference Guide 9.1
4. Click “Add” and when asked which store you wish to open, select “Computer Account”.
From an elevated command shell (launch cmd.exe as Administrator) run the steps below to create a
root certificate. Then, using mmc import into the Local Computer “Trusted Root Certification
Authorities\Certificates”, enter a password where prompted for the private key store.
Note: Having access to a private key allows consumers to create their own trusted keys, dependent on
the private keys chain. Therefore you should always save your private keys in a secure location.
Furthermore, by placing a self-signed (development) key within the Windows trusted CA store, this will
force the server to trust any further certificates that are chained to it, potentially causing a security risk –
so use this key with caution!
makecert.exe ^
-n "CN=DEMO Root CA – USE WITH CAUTION" ^
-r ^
-pe ^
-a sha512 ^
-len 4096 ^
-cy authority ^
-sv DemoDevelopmentRootCA.Keystore.pvk ^
DemoDevelopmentRootCA.cer
76
Securing EDS with HTTPS
Convert the private key store file (.pvk) into a portable .pfx file (personal exchange format). This file can
be used by other SSL client technologies such as Java.
pvk2pfx.exe ^
-pvk DemoDevelopmentRootCA.Keystore.pvk ^
-spc DemoDevelopmentRootCA.cer ^
-pfx DemoDevelopmentRootCA.Keystore.pfx ^
-po <password>
77
EDS Technical Reference Guide 9.1
8.3.1 Background
This paragraph is from the MSDN website:
Service certificates have the primary task of authenticating the server to clients. One of the initial
checks when a client authenticates a server is to compare the value of the Subject field to the Uniform
Resource Identifier (URI) used to contact the service: the DNS of both must match. For example, if the
URI of the service is "http://www.contoso.com/endpoint/" then the Subject field must also contain the
value "www.contoso.com".
Note that the field can contain several values, each prefixed with an initialization to indicate the value.
Most commonly, the initialization is "CN" for common name, for example, "CN = www.contoso.com". It
is also possible for the Subject field to be blank, in which case the Subject Alternative Name field can
contain the DNS Name value.
Also note the value of the Intended Purposes field of the certificate should include an appropriate
value, such as "Server Authentication" or "Client Authentication".
8.3.2 Instructions
The steps required to create a service certificate are very similar to those for establishing the root CA,
from a console execute the following:
makecert.exe ^
-n "CN=MyServer.demo.com" ^
-iv DemoDevelopmentRootCA.Keystore.pvk ^
-ic DemoDevelopmentRootCA.cer ^
-pe ^
-a sha512 ^
-len 4096 ^
-b 01/01/2017 ^
-e 01/01/2020 ^
-sky exchange ^
-eku 1.3.6.1.5.5.7.3.1 ^
-sv EDSServer.pvk ^
EDSServer.cer
Note: You must name the EDS service certificate after the fully qualified domain name of the host
(FQDN). This would normally be <servername>.<dns path>
To verify you have the correct FQDN, you can ping your host address.
pvk2pfx.exe ^
-pvk EDSServer.pvk ^
-spc EDSServer.cer ^
-pfx EDSServer.pfx ^
-po password
Once the service certificate has been created, you must import the EDSServer.pfx certificate into the
“Personal->Certificates” store using mmc following the same wizard steps as previous.
78
Securing EDS with HTTPS
A client certificate must also be created and imported into the EDS server, this is used to establish a
mutual trust relationship with any approved EDS client that is permitted to connect. The same client
certificate may then be shared with more than one client machine – please note within the context of
this example, any client machine will also need their own copy of the root certificate installed in order for
the client to support the same chain of trust.
pvk2pfx.exe ^
-pvk EDSClient.pvk ^
-spc EDSClient.cer ^
-pfx EDSClient.pfx ^
-po password
Once the client certificate has been created, you must import the EDSClient.pfx certificate into the
“Personal->Certificates” store using mmc following the same wizard steps as previous.
79
EDS Technical Reference Guide 9.1
Once the client and server certificates have been created and installed, you need to configure Windows
to accept one of them on a set of preconfigured ports. To do this you will need to obtain the “thumbprint”
of the service certificate.
8.4.2 Instructions
Using the thumbprint previously copied, run the following from the command shell:
Where certhash is the thumbprint value from the Service Certificate (without spaces) and appid is
gotten from a Registry format generated GUID.
After the thumbprints have been allocated, you will next need to reserve the https namespaces for
same ports and their access rights. To do so execute the following from the command line:
80
Securing EDS with HTTPS
For the astute reader, this new binding is identical to the existing one except now it includes a nested
“security” xml element. This new element is what instructs EDS to use transport level security (TLS)
rather than the default method.
Within this section add the following (after the existing behaviours):
<behavior name="TEOCO.EDS.v1.Secure">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerTrust"
trustedStoreLocation="LocalMachine"/>
</clientCertificate>
<serviceCertificate findValue=" bfa6d64854d530016c96c2e326926919cbc40c38"
storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint"/>
</serviceCredentials>
</behavior>
Within this new entry you will need to indicate the EDS server name and its thumbprint to match the
same value from the EDS Server Certificate – replace the string with the same value used in the
previous section.
81
EDS Technical Reference Guide 9.1
8.5.3 Update the EDS Endpoint Configurations with the new Behaviour and
Binding
The next step is to switch over the two http EDS endpoints to use the new configuration:
Within the config file, locate the section named “services” and where highlighted substitute:
- and -
Note: it is also advisable to comment out the “identity” element within each block.
82
Securing EDS with HTTPS
Using Registry Editor, add a new DWORD key named “ClientAuthTrustMode” to the following path,
set to “2”:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
Note: This step was necessary in the case of a self-signing demo, however be aware that it may not be
required with a properly issued Root CA or client or server certificate. Without applying this change, any
client that accesses the secured EDS endpoint will be issued with a simple “HTTP 403” rejection which
can indicate anything from an unpermitted client credential or a misconfiguration of the server.
For a full explanation of this registry setting please refer to the following Microsoft article – “Schannel
SSP Technical Overview”:
https://technet.microsoft.com/en-us/library/dn786429(v=ws.11).aspx
83
EDS Technical Reference Guide 9.1
If EDS has started successfully you will see that the binding configuration listed now supports https:
You should be able to see your secured endpoint WSDL in response – note you must use the exact
configured hostname as per your SSL certificate otherwise your browser may reject the site as a
security risk.
84
Securing EDS with HTTPS
Once installed you can quickly create a new project by clicking on “File->New SOAP Project” and
entering the EDS HTTP WSDL address it will download the API signatures and create test method calls
for each of the available operations:
As we are using a secured binding we need to give SoapUI our client certificate that we created earlier.
This certificate is used to provide a client credential to EDS in order for it to trust the client.
From the project view on the left-hand side, right click on required project->Show Project View.
85
EDS Technical Reference Guide 9.1
Navigate to the EDSClient.PFX file that was created earlier and and supply password for certificate.
Then on the individual Request (QueryableTypes is recommended), select “SSL Keystore” in the
Properties window and select the client certificate “EDSClient.pfx”. Finally select the green “play” button
on the SOAP operation and the API should respond similar to the following:
Note: SoapUI sometimes caches previous responses from a web service so its advisable to select the
correct certificate and restart before attempting an EDS query – otherwise it may return an HTTP 403.
<address-configuration address="MyServer.Demo.Com">
<message-broker
uri="activemq:failover:(tcp://localhost:61616)?transport.ReconnectDelay=5000&jms.useCompression
=true" />
<services>
<service name="TEOCO.EDS.Presentation.ServiceContract.EDSServiceImpl" address="" wsdl-
address="Aircom/EDS" wsdl-port="8730" wsdl-scheme="https">
<endpoints>
<endpoint name="EDSEndpoint" address="Aircom/EDS/WS" ignorePort="override"
Port="8732" />
<endpoint name="EDSWCFNetTCPEndPoint" address="Aircom/EDS/TCP"
ignorePort="override" Port="8734" />
</endpoints>
</service>
86
Securing EDS with HTTPS
</address-configuration>
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="jsonHttpBehaviour"
type="TEOCO.EDS.Presentation.XML.ASSET.Helpers.JsonBehaviorElement,
TEOCO.EDS.Presentation.XML.ASSET" />
</behaviorExtensions>
</extensions>
<bindings>
<basicHttpBinding>
<binding name="EDS Streaming Binding" closeTimeout="00:03:00" openTimeout="00:01:00"
receiveTimeout="00:30:00" sendTimeout="00:30:00" maxBufferSize="2147483647"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Mtom"
transferMode="Streamed">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
<binding name="EDS Secure Streaming Binding" closeTimeout="00:03:00"
openTimeout="00:01:00" receiveTimeout="00:30:00" sendTimeout="00:30:00"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647" messageEncoding="Mtom">
<security mode="Transport">
<transport clientCredentialType="Certificate" proxyCredentialType="None"
realm=""/>
</security>
<readerQuotas maxDepth="32" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
</binding>
</basicHttpBinding>
<netTcpBinding>
<binding name="EDS Streaming NetTCP Binding" sendTimeout="00:30:00"
transferMode="Streamed" maxReceivedMessageSize="2147483647">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxNameTableCharCount="2147483647" />
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</netTcpBinding>
<customBinding>
<binding name="Custom HTTP Binding">
<webMessageEncoding
webContentTypeMapperType="TEOCO.EDS.Presentation.XML.ASSET.Helpers.RawContentTypeMapper,
TEOCO.EDS.Presentation.XML.ASSET" />
<httpTransport maxReceivedMessageSize="2147483647" transferMode="Streamed"
manualAddressing="true"/>
</binding>
</customBinding>
</bindings>
<services>
<service behaviorConfiguration="TEOCO.EDS.v1.Secure"
name="TEOCO.EDS.Presentation.ServiceContract.EDSBasicServiceImpl">
<endpoint address="http://overwritten_by_address_configuration_block"
binding="basicHttpBinding" bindingConfiguration="EDS Secure Streaming Binding"
name="EDSBasicEndpoint"
bindingNamespace="http://www.aircominternational.com/contract/EDSBasic/2013/03"
contract="TEOCO.EDS.Presentation.XML.ASSET.Contracts.IEDSBasicService"/>
<endpoint address="http://overwritten_by_address_configuration_block"
binding="netTcpBinding" bindingConfiguration="EDS Streaming NetTCP Binding"
name="EDSBasicWCFNetTCPEndPoint"
bindingNamespace="http://www.aircominternational.com/contract/EDSBasic/2013/03"
contract="TEOCO.EDS.Presentation.XML.ASSET.Contracts.IEDSBasicService" />
</service>
<service behaviorConfiguration="TEOCO.EDS.v1.Secure"
name="TEOCO.EDS.Presentation.ServiceContract.EDSServiceImpl">
<endpoint address="https://overwritten_by_address_configuration_block"
binding="basicHttpBinding" bindingConfiguration="EDS Secure Streaming Binding" name="EDSEndpoint"
bindingNamespace="http://www.aircominternational.com/contract/EDS/2009/05"
contract="TEOCO.EDS.Presentation.XML.ASSET.Contracts.IEDSService"/>
<endpoint address="http://overwritten_by_address_configuration_block"
binding="netTcpBinding" bindingConfiguration="EDS Streaming NetTCP Binding"
name="EDSWCFNetTCPEndPoint"
87
EDS Technical Reference Guide 9.1
bindingNamespace="http://www.aircominternational.com/contract/EDS/2009/05"
contract="TEOCO.EDS.Presentation.XML.ASSET.Contracts.IEDSService" />
</service>
<service behaviorConfiguration="TEOCO.EDS.v1"
name="TEOCO.EDS.Presentation.ServiceContract.EDSRestService">
<endpoint address="http://overwritten_by_address_configuration_block"
binding="customBinding" bindingConfiguration="Custom HTTP Binding"
behaviorConfiguration="RESTFriendly" name="EDSRESTEndpoint"
bindingNamespace="http://www.aircominternational.com/contract/EDS/2009/05"
contract="TEOCO.EDS.Presentation.XML.ASSET.Contracts.IEDSRestService"/>
</service>
<service behaviorConfiguration="TEOCO.EDS.v1"
name="TEOCO.EDS.Presentation.ServiceContract.EDSBasicRestService">
<endpoint address="http://overwritten_by_address_configuration_block"
behaviorConfiguration="RESTFriendly" binding="customBinding" bindingConfiguration="Custom HTTP
Binding" name="EDSBasicRESTEndpoint"
bindingNamespace="http://www.aircominternational.com/contract/EDS/2013/03"
contract="TEOCO.EDS.Presentation.XML.ASSET.Contracts.IEDSBasicRestService"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="RESTFriendly">
<jsonHttpBehaviour />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="TEOCO.EDS.v1">
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="TEOCO.EDS.v1.Secure">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<clientCertificate>
<authentication
certificateValidationMode="PeerTrust"
trustedStoreLocation="LocalMachine" customCertificateValidatorType=""/>
</clientCertificate>
<serviceCertificate findValue="41D2438896512C7910FE6C712BF5A86AA1222E33"
storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<diagnostics>
<messageLogging logEntireMessage="false" logMalformedMessages="false"
logMessagesAtTransportLevel="false" />
</diagnostics>
</system.serviceModel>
88
Securing EDS with HTTPS
The following fragment describes what a WCF client configuration might contain in order to share a
certificate with a secured EDS endpoint (either HTTPS or netTCP). Note that the client must share a
certificate of its own to the server in order to be trusted and that the client certificate is installed on the
server itself.
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="EDSEndpoint" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
messageEncoding="Mtom">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
<netTcpBinding>
<binding name="EDS Streaming NetTCP Binding" sendTimeout="00:30:00"
transferMode="Streamed" maxReceivedMessageSize="2147483647">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxNameTableCharCount="2147483647" />
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="TEOCO.EDS.v1.Secure">
<clientCredentials>
<clientCertificate findValue="4862B930291A7B57FA06D917C92198694751F0A5"
storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint"
/>
<serviceCertificate>
<authentication certificateValidationMode="PeerOrChainTrust"
trustedStoreLocation="LocalMachine"/>
</serviceCertificate>
</clientCredentials>
<callbackDebug includeExceptionDetailInFaults="true" />
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint address="https://myserver.demo.com:8732/Aircom/EDS/WS"
binding="basicHttpBinding" bindingConfiguration="EDSEndpoint"
contract="EDSHttps.EDS" name="EDSEndpoint" behaviorConfiguration="TEOCO.EDS.v1.Secure"/>
<endpoint address="net.tcp://myserver.demo.com:8734/Aircom/EDS/TCP"
binding="netTcpBinding" bindingConfiguration="EDS Streaming NetTCP Binding"
contract="EDSHttps.EDS" name="EDSWCFNetTCPEndPoint"
behaviorConfiguration="TEOCO.EDS.v1.Secure">
</endpoint>
</client>
</system.serviceModel>
89
EDS Technical Reference Guide 9.1
Note: This script is provided for information purposes only and is not supported by TEOCO.
Where hostname is your EDS server and dns is the trailing FQDN suffix.
param (
[string]$hostname = "my-server",
[string]$dns = "demo.mydomain.com",
[string]$organisation = "O=MYCOMPANY,C=UK"
)
$rootca = $root.Thumbprint
$eds = $EDSServer.Thumbprint
$path = "cert:\localmachine\my\" + $EDSServer.Thumbprint
90