Local Map Services

3295
10
Jump to solution
06-09-2012 08:37 PM
ShaunWeston
Occasional Contributor
So I understand that when we load map packages they are bound to the local server and a mini ArcGIS Server is created with a list of services we can access through the REST API. I can see these services at a directory like this:

http://127.0.0.1:50000/V3XM5j/arcgis/rest/services (With the name changing each time)

And I see that the map services, gp services, feature services and geocoding services are all listed there, HOWEVER the Tiled packages are not?

Just wondering why they are not listed? It's great that the architecture is basically the same as ArcGIS Server, but are the tiled map services done differently?
0 Kudos
1 Solution

Accepted Solutions
MichaelBranscomb
Esri Frequent Contributor
Hi,

RE: Tile Packages:

We found that reading Tile Packages directly from disk as a single TPK file offers excellent performance without going as far as implementing a local tiled service which would require the runtime local server. This also means that, licensing-wise, Tile Packages are available with the lowest level of license, termed "Basic". For more info see http://resourcesbeta.arcgis.com/en/help/runtime-wpf/concepts/index.html#/Functionality_set_requireme....


RE: http://127.0.0.1:50000/V3XM5j/arcgis/rest/services (With the name changing each time):

You can use the Local Server Utility (accessed from the Start menu) to control various properties of the runtime local server. This can be useful when debugging your application. One of these properties is the random prefix ("V3XM5j" in your example) which means you can keep hitting the same URL from a browser if you need to view the REST endpoint for local services as HTML/JSON (i.e. http://127.0.0.1:50000/arcgis/rest/services). It will also allow you to capture the http traffic in a network monitoring tool such as Fiddler.


Cheers

Mike

View solution in original post

0 Kudos
10 Replies
MichaelBranscomb
Esri Frequent Contributor
Hi,

RE: Tile Packages:

We found that reading Tile Packages directly from disk as a single TPK file offers excellent performance without going as far as implementing a local tiled service which would require the runtime local server. This also means that, licensing-wise, Tile Packages are available with the lowest level of license, termed "Basic". For more info see http://resourcesbeta.arcgis.com/en/help/runtime-wpf/concepts/index.html#/Functionality_set_requireme....


RE: http://127.0.0.1:50000/V3XM5j/arcgis/rest/services (With the name changing each time):

You can use the Local Server Utility (accessed from the Start menu) to control various properties of the runtime local server. This can be useful when debugging your application. One of these properties is the random prefix ("V3XM5j" in your example) which means you can keep hitting the same URL from a browser if you need to view the REST endpoint for local services as HTML/JSON (i.e. http://127.0.0.1:50000/arcgis/rest/services). It will also allow you to capture the http traffic in a network monitoring tool such as Fiddler.


Cheers

Mike
0 Kudos
ShaunWeston
Occasional Contributor
Ah I See! Yes the tile packages are very quick to load and good to use.

Oh ok cool, I didn't see the local server utility tool. It's got a bunch of useful stuff there I can use for debugging.

Cheers 🙂
0 Kudos
AA8
by
New Contributor
I have a related question - if you can't see the tiled map services listed via REST then how can you enumerate them?

I ask because I have an application that works with the old ArcGIS Online API for WPF and it goes via REST to enumerate the service catalog for servers and then allows access to these services. Now I am interested in expanding it to work with local servers. So I thought fine I'd just be able to point it at the local web server and it would work (although I have concerns about the random port number, random letters inserted before ArcGis in the URI and generally whether all the requests would still work e.g. GetServiceDescriptionsRequest).

But the posts above seem to suggest that tiled services won't appear in the catalog for local servers which would scupper my application.

Thanks.
0 Kudos
MichaelBranscomb
Esri Frequent Contributor
Hi,

For local content, the RuntimeLocalServer just should really be considered just implementation detail, not necessarily something you address directly. When supporting offline workflows the content you're working with comprises Map Packages, Tile Packages, Locator Packages, and Geoprocessing Packages. Therefore I'd advise using the API rather than making RESt calls directly. Having said that, you do need to be aware of the underlying RuntimeLocalServer infrastructure because you're effectively a local server admin. Some of the settings a server admin would normally configure in ArcGIS for Server, you set via the API for local services.

Cheers

Mike
0 Kudos
AA8
by
New Contributor
But from my understanding of the above posts there is no way of enumerating the services available locally through the API.
Indeed even if I was to use REST to get the service catalogue then it still wouldn't tell me which tiled map services were available.
Since my application can connect to any ArcGIS server currently and allow the user to select and access a service there appears to be no way to do this through the new runtime for local servers.
0 Kudos
MichaelBranscomb
Esri Frequent Contributor
Hi,

Actually the API is there for enumerating local services running on the RuntimeLocalServer (http://resources.arcgis.com/en/help/runtime-wpf/apiref/index.html?ESRI.ArcGIS.Client.Local~ESRI.ArcG...).

But what I was really trying to say is that the only local services running would be the ones your application has already explicitly started via the API and therefore I coudn't easily envisage a scenario where you would need to access the service catalog as you might want to for an online server where there are a published set of services.

Cheers

Mike
0 Kudos
AA8
by
New Contributor
Hi,

Actually the API is there for enumerating local services running on the RuntimeLocalServer (http://resources.arcgis.com/en/help/runtime-wpf/apiref/index.html?ESRI.ArcGIS.Client.Local~ESRI.ArcG...).

But what I was really trying to say is that the only local services running would be the ones your application has already explicitly started via the API and therefore I coudn't easily envisage a scenario where you would need to access the service catalog as you might want to for an online server where there are a published set of services.

Cheers

Mike


But how can I start the services running if I don't know which services are there to start with?
My scenario is we have lots of customers running ArcGIS servers, desktop etc. and we give them our app and we don't know what services they have set up either locally or online. The app needs to be able to point at the local package file(s) they have created from desktop and say hey here is a tiled map service, geocoding service etc. etc. It then starts them up and can access them and present the services to the user.

But as I understand it currently we can only enumerate services that are already running. So its a bit of a chicken and egg situation.
0 Kudos
MichaelBranscomb
Esri Frequent Contributor
Hi,

Although the ArcGIS Runtime SDK for WPF uses a "local server" to host local content for offline use, there is not one central local server on the client machine which may be hosting any number of services. When you deploy your application, you also deploy an ArcGISRuntime deployment folder. That folder contains and number of ArcGIS Runtime components, including what will become an instance of the RuntimeLocalServer. That instance is only used by your application, hence the port numbering and unique prefix (both of which you can control via the LocalServerUtility tool). There may be multiple WPF applications on the machine, but each will be using it's own RuntimeLocalServer instance. Therefore, the only services you'll be accessing are the ones your application has created.

Each local server is seeded from a package (Map, Locator, Geoprocessing) and therefore when working with offline content your application really works with packages and the local Layer types that expose them. Although it is important to understand the architecture, the fact there's a local server is really just an implementation detail.

Cheers

Mike
0 Kudos
AA8
by
New Contributor
Hi,

Although the ArcGIS Runtime SDK for WPF uses a "local server" to host local content for offline use, there is not one central local server on the client machine which may be hosting any number of services. When you deploy your application, you also deploy an ArcGISRuntime deployment folder. That folder contains and number of ArcGIS Runtime components, including what will become an instance of the RuntimeLocalServer. That instance is only used by your application, hence the port numbering and unique prefix (both of which you can control via the LocalServerUtility tool). There may be multiple WPF applications on the machine, but each will be using it's own RuntimeLocalServer instance. Therefore, the only services you'll be accessing are the ones your application has created.

Each local server is seeded from a package (Map, Locator, Geoprocessing) and therefore when working with offline content your application really works with packages and the local Layer types that expose them. Although it is important to understand the architecture, the fact there's a local server is really just an implementation detail.

Cheers

Mike


So are you saying that if my customer enters a path into my app to a folder with his packages in then I can just create the local server(s) from those packages (enumerating the files by the known package extensions) and then I can ask the API what services are actually contained in those packages? That is what I need to be able to do - it's not a simple case of me deploying packages for a customer or knowing in advance what packages they are going to create and what services will be in those packages. Our customers for security reasons can't tell us anything except for a location where there may be some package files or some sort so that's all I've got to work from.
0 Kudos