ThinkGeo.com    |     Documentation    |     Premium Support

Silverlight Control Behavior

I'm trying to get a better understanding of how the silverlight control works and am running into a few problems.


In the HelloWorld sample, if I set the silverlight project as my startup - it works fine.


If I set the web project as the start up and specify the default as the starting page so I can do server side rendering - no map ever displays.


If I set the web project as the start up and specify the test page as the starting page - the map displays, but the code in the default.aspx.cs never gets called (as expected).


I've created some basic sample apps from scratch and I get the same behavior.


I'm probably missing one link/step, but I just can't seem to find it. Any help would be appreciated.


 


 


 



Bob



Here is a diagram for Silverlith Edition:





From this diagram, there are two parts which is client side rendering while another part is server side rendering.



MapConnector plays a role of a connector between getting tile requests and sending tile images back. It’s kind of HttpHandler.  But we need a place to set the configuration of the map. So MapConnector is the one.



If you are using Server Rendering, please do add the map connector on the web page which you display the map.



In your sample, you just using the client side rendering and commend out the server side rendering. Also there is an code issue on the server side rendering that there is no layer added on the server side. The layers adding on the ThinkGeo3XAML is for loading from Client Side Rendering. You need to add the layers on the server side which will renders on the server side.



Your sample is similar like our QuickStart; please review it and download our QuickStart Sample. I think you’ll clear how it works then.



Any questions please let me know.



Thanks,

Howard

 



Howard, 
  
 Thanks for the overview. That makes things a bit clearer. However, I found the problem why the app doesn’t work.The HelloWorld Silverlight sample app fails in a Foxfire browser (v3.5.1). It simply doesn’t display any map layers and the status bar just shows “Read localhost”. I’m running on a development Win7RC machine w/Silverlight3. The HelloWorld Silverlight app works in IE8 (in compatibility mode).

Bob, 
  
 I see. Silverlight 3 just released for couple days, now we are doing this upgrading; We’ll have a new release which compatible in 2.0 and 3.0 in the middle of next month. Please keep an eye on our website. 
  
 If you have any questions please let me know. 
  
 Thanks, 
 Howard

So now that I got the HelloWorld sample app running on my development machine, I'm trying to deploy it to my test web server (windows web server 2008 & IIS 7). The state layer shows with no problems, but now the country layer rendered by the server does not appear. I sent in a registration request a few minutes ago. When I load registration file, will this solve this server rendering issue?



Bob, 
  
 That sounds weird. I don’t think it’s the issue of registration.  
 Here are something may cause this issue. 
  
 1. Use Classic App pool instead.  
 2. Is the Permission setting right? Try to add everyone. 
 3. Can your IIS download the xap file directly? I think it can because you mentioned the states runs fine. Just make sure of it. 
 4. The httpHandler may not register right. I recommend installing httpWatch tool to watch the request addresses; open it in a new Web Browser. I think it will throw the real exception. 
  
 Please let me know the result. 
 I published once but it works fine in II6; I need to test in IIS7 later and let you know the result. 
  
 Any questions please let me know. 
  
 Thanks, 
 Howard 


Switching to Classic App pool solved the problem.


Now I can start playing with the silverlight edition control and the world map kit in a test web server environment.


Thanks again for your help!


Bob


 



Bob,  
  
 You are always welcome. Please feel free to let me know if you have any questions. 
  
 Thanks, 
 Howard

Hi Howard, 
  
 I’ve been having similar problems with running the app from a test server. Running it from my dev machine works fine, but when you try to load the mapping control from the server, the Silverlight map control is displayed but no maps are loaded. I’ve tried using the Classic Application pool and checked the permissions but to no avail.  
  
 I used Fiddler to watch the HTTP requests and got several instances of the following error: 
  
 GET webserv/FleetMarshalMapsControl/GeoTile.axd?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application/vnd.ogc.se_inimage&FORMAT=image/jpeg&SRS=EPSG:4326&PAGENAME=&EXTRA=&overlayid=NativeServer&Connector=SilverlightMapConnector1&BBOX=112.5,-45,135,-22.5&WIDTH=256&HEIGHT=256&UNIT=DecimalDegree&SCALE=36911986.875 
 500 Internal Server Error 
  
 Any ideas? 
  
 Thanks, 
  
 Nirish

Nirish, 
  
 It’s hard to recreate your issue on our end; could you please open the address to a new browser and see whether there is any exception threw. 
  
 Also, please provide us your OS and IIS version so that we can prepare the environment. 
  
 Thanks, 
 Howard

Hi Howard, 
  
 It throws the same errors with other browsers as well. 
  
 Our environment consists of: 
  
 OS: Windows Web Server Version 6.0 (Build 6001: Service Pack 1), 2007 
 IIS: Version 7.0.60000.16386 
  
 Thanks, 
  
 Nirish

Nirish, 
  
 I mean open the address which watched from the Http requests such as "webserv/FleetMarshalMapsControl/GeoTile.axd?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application/vnd.ogc.se_inimage&FORMAT=image/jpeg&SRS=EPSG:4326&PAGENAME=&EXTRA=&overlayid=NativeServer&Connector=SilverlightMapConnector1&BBOX=112.5,-45,135,-22.5&WIDTH=256&HEIGHT=256&UNIT=DecimalDegree&SCALE=36911986.875" in a new browser. It might be shown you the real exception of your application.  
  
 Please let me know then. 
  
 Thanks, 
 Howard

Hi Howard, 
  
 We’ve got the map loading from the server. Not sure how we got it to work. However, the loading of the tiles is MUCH slower than on the localhost. When the client sends the request for tiles (when I zoom in, pan, etc), I can see the cache images being generated on the server, but I have to wait for ages (if the tiles do load) to see the tiles being loaded on the Silverlight app. The performance is just too slow. Do we need to generate all the tile cache images before loading the app on the browser? How can we improve the speed / performance of the map load? 
  
 Thanks, 
  
 Nirish

Nirish,



I guess the low performance is because of your data is too big. Could you provide us the data you are using? On the other hand, we support pregenerate cache images by the following code; please have a try:

serverLayerOverlay.ServerCache.CacheDirectory = "C:\\CacheImage\\";
serverLayerOverlay.ServerCache.CacheId = "ServerLayerOverlay";
ZoomLevelSet levelSet = new ZoomLevelSet();
RectangleShape worldExtent = new RectangleShape(-180, 90, 180, -90);

// Generate Zoom Level 01-02's cache images.
serverLayerOverlay.GenerateCacheImages(levelSet.ZoomLevel01.Scale, worldExtent, GeographyUnit.DecimalDegree, 256, 256);
serverLayerOverlay.GenerateCacheImages(levelSet.ZoomLevel02.Scale, worldExtent, GeographyUnit.DecimalDegree, 256, 256);



Let me know if you have any questions.



Thanks,

Howard



Hi Howard,


Here's the list of the shape files we're loading onto the ServerLayerOverlay as individual ShapeFileFeatureLayers. Except for the country, all the other files are for one state only.




    
    
        
            Shape file
            Size (MB)
        
        
            Country
            0.15
        
        
            Major highways
            5.9
        
        
            Secondary highways
            19.75
        
        
            Streets
            88.7
        
        
            Water bodies
            25.7
        
        
            Rail roads
            1.6
        
        
            Parks
            8.6
        
        
            Cities (Points)
            0.13
        
        
            TOTAL
            150.53
        
    


I built a little caching utility and used your sample code to generate the cache images for the map data above. 


ZoomLevelSet levelSet = new ZoomLevelSet(); 


RectangleShape cacheExtent = new RectangleShape(110, -10, 155, -45); serverLayerOverlay.GenerateCacheImages(levelSet.ZoomLevel01.Scale, cacheExtent, GeographyUnit.DecimalDegree, 256, 256); 


//... 


//... 


serverLayerOverlay.GenerateCacheImages(levelSet.ZoomLevel20.Scale, cacheExtent, GeographyUnit.DecimalDegree, 256, 256); 


I started the caching process on Friday afternoon and let it run over the weekend and until this morning (Tuesday). It finished caching upto zoom level 13 this morning and I had to stop it while it was caching zoom level 14. I collected the following stats for the process. The red ones are predicted based on the time taken for zoom level 13.  If I had let it continue, it would've finished caching zoom level 20 in the year 2018!




    
    
        
            Zoom Level
            Start
            End
            Duration
        
        
            1
            30/10/2009 14:49
            30/10/2009 14:49
            0:00:00
        
        
            2
            30/10/2009 14:49
            30/10/2009 14:49
            0:00:00
        
        
            3
            30/10/2009 14:49
            30/10/2009 14:49
            0:00:00
        
        
            4
            30/10/2009 14:49
            30/10/2009 14:49
            0:00:00
        
        
            5
            30/10/2009 14:49
            30/10/2009 14:49
            0:00:00
        
        
            6
            30/10/2009 14:49
            30/10/2009 14:50
            0:01:00
        
        
            7
            30/10/2009 14:50
            30/10/2009 14:51
            0:01:00
        
        
            8
            30/10/2009 14:51
            30/10/2009 14:54
            0:03:00
        
        
            9
            30/10/2009 14:54
            30/10/2009 14:59
            0:05:00
        
        
            10
            30/10/2009 14:59
            30/10/2009 15:23
            0:24:00
        
        
            11
            30/10/2009 15:23
            30/10/2009 18:09
            2:46:00
        
        
            12
            30/10/2009 18:09
            31/10/2009 18:26
            24:17:00
        
        
            13
            31/10/2009 18:26
            3/11/2009 8:53
            62:27:00
        
    




    
    
        
            14
            3/11/2009 8:53
            10/11/2009 1:29
            160:36:15
        
        
            15
            10/11/2009 1:29
            27/11/2009 6:31
            413:01:45
        
        
            16
            27/11/2009 6:31
            10/01/2010 12:42
            1062:11:47
        
        
            17
            10/01/2010 12:42
            4/05/2010 8:23
            2731:40:30
        
        
            18
            4/05/2010 8:23
            21/02/2011 1:29
            7025:06:37
        
        
            19
            21/02/2011 1:29
            14/03/2013 20:08
            18066:38:09
        
        
            20
            14/03/2013 20:08
            2/07/2018 18:30
            46462:22:40
        
        
             
             
            TOTAL
            76011:41:43
        
    


Red Cells = Predicted 


We haven't had to handle such large map data before. We used to work with ECW files in the Desktop Edition. So we're pretty new to the optimisation of shape file loading / caching in the Silverlight Edition. We would appreciate any help / suggestions from you with regards to implementing an efficient client-server Silverlight mapping solution with large map data.


Thanks,


Nirish



Hi Nirish,


It’s weird to hear that it will not be finished for generating caching images from ZoomLevel01 to ZoomLevel20 until 2018. So we suggest not generating caching images for 20 ZoomLevels instead by generating caching images at runtime. That means your application generates caching images when user send the requests.
In fact, we have done the same thing using World Map Kit Data (totally 18.7G). We got for ZoomLevel 11 for the land; from ZoomLevel 12 to ZoomLevel 16 for Urban Detail Caching, and for ZoomLevel17 to ZoomLevel 20 we generate the caching images at runtime.
The following figure shows that the cost time when we are generating the cache image of World Map Kit.


    
        
            
            ZoomLevel
            
            
            Number of Tiles /Total tiles for this ZoomLevel
            
            
            Proportion
            
            
            Time
            
            
            Disk Space
            
        
        
            
            11
            
            
            198000/524288
            
            
            37.7655%
            
            
            30min
            
            
            1.02G
            
        
        
            
            12
            
            
            32640/2097152
            
            
            1.556396%
            
            
            50min
            
            
            145M
            
        
        
            
            13
            
            
            103680/8388608
            
            
            1.2359619%
            
            
            158min
            
            
            466M
            
        
        
            
            14
            
            
            290560/33554432
            
            
            0.8659362%
            
            
            480min
            
            
            1.99G
            
        
        
            
            15
            
            
            643456/134217728
            
            
            0.4794120%
            
            
            32hours
            
            
            4.66G
            
        
        
            
            16
            
            
            1078912/536870912
            
            
            0.2009630%
            
            
            60hours
            
            
            6.98G
            
        
    


Any more questions please let me know.
Thanks,
Sun

i have the same problem as Nirish described before: i put a simple SL app into IIS 7, all SL controls were displayed correctly, but the map are not rendered from the server. i also tried putting the HowDoI samples to IIS the result is the same. Maybe there is some configuration to be done? am using Windows 7, IIS 7.5, 64-bit

Hi, Ric  
  
 Please refer to the post below: 
 gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/28/aft/7362/afv/topic/afpgj/1/Default.aspx#16220 
  
 Thanks, 
 Khalil