ThinkGeo.com    |     Blog    |     Wiki    |     Support

Smartmap Service error while getting tiles

Hello,



recently I got some exception while debugging using visual studio. IE sometimes show javascript error.

after I checked using fiddler this is what i found.







I found some differences between successfull request and failed one.



below is a correct request url (does not return exception)


<a href=“localhost” tabindex=“0”>localhost</a>:8910/SmartMap/GeoTile.axd?BBOX=115.191650390625,-8.7451171875,115.20263671875,-8.734130859375&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&EXCEPTIONS=application/vnd.ogc.se_inimage&FORMAT=image/jpeg&SRS=EPSG:4326&PAGENAME=iProTax.SmartMap&EXTRA=&OVERLAYID=ServerOverlay5103010001jl&CONNECTOR=SmartMapConnector&&WIDTH=256&HEIGHT=256&UNIT=DecimalDegree&SCALE=18023.4310913086



I notice that in above url the “OVERLAYID” and “CONNECTOR” query string values are present and has correct value,

But, when exception happens, this is the url


<a href=“localhost”>localhost</a>:8910/SmartMap/GeoTile.axd?BBOX=115.15869140625,-8.7451171875,115.169677734375,-8.734130859375&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&EXCEPTIONS=application/vnd.ogc.se_inimage&FORMAT=image/jpeg&SRS=EPSG:4326&PAGENAME=iProTax.SmartMap&EXTRA=&OVERLAYID=14b86d55-fde7-4e9e-8091-e9962b50a63b&CONNECTOR=&&WIDTH=256&HEIGHT=256&UNIT=DecimalDegree&SCALE=18023.4310913086

you can see from the request that “OVERLAYID” value is some GUID string, and “CONNECTOR” value is empty.





anybody knows what is wrong?

Hi Syarief, 
  
 Are you using our ServerLayerOverlay? I view the code and find the default value for it assign a random GUID to "Connector" and empty string to "overlayid". 
  
 So the different should be caused by the process abort after ServerLayerOverlay initialized. I am not sure where is the problem but if there are some code should be helpful for research it. 
  
 And is the Smartmap a third part service? 
  
 Regards, 
  
 Don

Hi Don,



yes I’m using ServerLayerOverlay,



actually what you see in the code tag is the URL request that I copied from fiddler. it’s not my code logic.

from the image I attach, you could see there is “Result” column, and there are values 200 (HTTP OK) and 500 (HTTP Internal Server Error).

I just put one URL request from 200 (OK), and from 500 (Server error), and that’s actually what you see inside code tag.



SmartMap is only folder name where i put my aspx page to load my silverlight app.

Hi Syarief, 
  
 Thanks for let me know the detail. 
  
 My problem is whether I can reproduce the 500 error in our HowDoISample or need I create another project for that? 
  
 Because I tried Fiddler today and haven’t found the 500 error with our sample project. 
  
 So I think I need reproduce that first. 
  
 Regards, 
  
 Don

Hi Don,



maybe you can reproduce it like this.



At first I have 4 shapefile, I load each file using separate layers, and add it into 1 serveroverlay that I’ve created before.



Now I want to be able to control what layer can be seen in my silverlight apps, so I change how I load those shapefile. I load each shapefile and add it into separate overlay.

because now I have separate overlay, I can easily remove and add ServerOverlay in my Silverlight Apps so that I can only see what layer(s) I want to see.

And don’t forget on top of that, I also add Google overlay via ServerOverlay too as base Overlay and I also can hide and show this overlay.



Hope that can help you reproduce the same effect.

Ooh, and one more thing.

does it has anything to do with changing ServerOverlay (adding or removing) while MapSuite Smartmap controls loads the tile?


Hi Syarief, 
  
 I will try to reproduced that follow your steps. 
  
 For your question, do you meant you want to add or remove ServerOverlay when the map is loading? Just like what JavaScript works for Web page? 
  
 Regards, 
  
 Don

Hi Don, 
  
 I just want to be able remove or adding ServerOverlay without paying attention wether Map has loaded the tiles or not, so basically the answer is yes.

Hi Syarief,



Thanks for your detailed description of the issue, there are 2 reasons why that error occurs in your application, just shown as below:

1. The OverlayId should be same to the one you specified in the Asp.NET application, when you create the ServerLayerOverlay on server side, for example, if the code in Asp.NET is:


GoogleMapsLayer googleStatelliteLayer = new GoogleMapsLayer();
googleStatelliteLayer.MapType = GoogleMapsMapType.Satellite;
ServerLayerOverlay layerWithGoogelSatelliteMapOverlay = new ServerLayerOverlay(“NativeServerWithGoogleSatelliteMap”);
layerWithGoogelSatelliteMapOverlay.Layers.Add(googleStatelliteLayer);
SilverlightMapConnector1.ServerLayerOverlays.Add(layerWithGoogelSatelliteMapOverlay);



the client in Silverlight should use the ID “NativeServerWithGoogleSatelliteMap” to create the ServerLayerOverlay, just shown as following:


ServerLayerOverlay overlay4 = new ServerLayerOverlay(“NativeServerWithGoogleSatelliteMap”, “SilverlightMapConnector1”);

2. Please make sure the ConnectorId is not empty, because this is a very important parameter to fetch the configurations from storage on server side. If it’s empty, it will give the exception shown in your attached image.





Sorry for the inconvenience, I guess we shouldn’t public the constructor of ServerLayerOverlay without parameter in SilverlgitEdition.dll, we will do the enhancements in next release.



Thanks,

Johnny





    

Hi Johnny,



Thanks you so much you saved my time, that was actually the culprit that causing error.



Thanks.

Hi Johnny,



I just want to add my opinion about this problem, why doesn’t MapSuite service just ignore the request (instead of throwing error) when it couldn’t find the overlay based on id parameter. Because in the end, the silverlight client doesn’t even know what has happened or wrong.



Thanks.

Hi Syarief, 
  
 Thank you very much for your suggestion, I was thinking maybe we can add a ExceptionMode property to the Map object, and make it as "DrawException" by default to avoid app crash. I have entered this requirement to our issue tracking system. Hope it can be available in the daily builds soon. 
  
 Regards, 
 Johnny