ThinkGeo.com    |     Documentation    |     Premium Support

WPF client using TiledWMSLayer-WmsOverlay to access WMS server

HI Thinkgeo,


The performance of map rendering on Web client from WMS server is satisfactory.


However when I I try to access maps from a WPF client using WmsOverlay default it is very slow and some tiles do not show up.


Using with WMSOveraly (with TileType=SingleTile) it works ok


However I am unable to use TiledWMSLayer. Is there any better way to render maps on WPF client from  WMS server?


Regards,


Anil



Hi, Anil


Have you tried to use the TiledWmsOverlay to consume your own WorldMapKit Service? Also you can try to use the WorldMapKitLayer in MapSuiteCore or WorldMapKitWmsWpfOverlay in MapSuite WpfDesktopEdition which is used to consume our online WorldMapKit service?


If you still have problems about it, please provide us the code you use or the exception it throws.


Thanks,


Khalil



Hi ThinkGeo, 
  
 I don’t find any class named TiledWmsOverlay in WPF edition or WMS server edition.  Am I missing something? 
  
 I had used WorldMapKitWpfOverlay to consume Thinkgeo WorldMap. It worked ok. But for my case< I want to use data from our WMS server on WPF client. 
  
 Is there an example to use WorldMapKitLayer (MapSuiteCore) from WPF client. Not clear how will send the URI while invoking from WPF client code? 
  
 Right now i have only used WmsOverlay and TiledWMSLayer where I ran into problems. 
  
 Regards, 
 Anil

 


Hi Anil,
The TiledWmsOverlay in WPF is added days before. As I guessed, you are using an old version, can you update to latest version 4.0.143.0 or higher? It’s added especially for consuming the WMS server developed with WMS Server Edition.
Thanks,
Johnny

Hi Thinkgeo,


I got the latest WPF latest dlls and able to use TiledWMSOverlay. The behavior is same as WMSOverlay.


If i set the TileType=Single then it works fine but not when I set TileType=Multiple.


Regards


Anil



Anil,


Can you let us know how many layers are added into the TiledWmsOverlay, all the layers are drawn on the fly or cached? I’m sorry that we are unable to recreate the issue. Can you give us a demo? Here as following is the code that I tested with installation “Display A Simple Map” plugin, can you check whether there is any difference from yours?


        private void WpfMap_Loaded(object sender, RoutedEventArgs e)
        {
            Map1.MapUnit = GeographyUnit.DecimalDegree;
            Map1.CurrentExtent = new RectangleShape(-155.733, 95.60, 104.42, -81.9);

            //WorldMapKitWmsWpfOverlay worldOverlay = new WorldMapKitWmsWpfOverlay();
            //Map1.Overlays.Add("WMK", worldOverlay);

            TiledWmsOverlay overlay = new TiledWmsOverlay(new Collection<Uri>() { new Uri("localhost:59387/WmsHandler.axd") });
            overlay.TileCache = null;
            overlay.Parameters.Add("Layers", "Display A Simple Map");
            overlay.Parameters.Add("Styles", "DEFAULT");
            overlay.TileType = TileType.SingleTile;

            Map1.Overlays.Add(overlay);

            Map1.Refresh();
        }


 
Thanks,
Johnny

Hi Johnny,


When I use WPF Client and as follows, I get tiles that are not completely built (as in the attached file)


tiledWmsOverlay.TileType = TileType.MultipleTile;


Regards,

Anil

 



Hi Johnny,


Here is the attached file in a compressed folder


Regards,


Anil



ProblemTileType_Multiple.zip (253 KB)

Hi Anil,


Just from the picture, it seems that the installed “How Do I Samples” also runs into the issue you have mentioned, right? It’s very strange, can you let us know the configuration of your deployment server and application running server? Such as Ram, OS, IIS configuration etc. and we can prepare a similar environment for test.
Additionally, I will talk to our Wpf Team about it. Hope they have some ideas.
Thanks,
Johnny

Hi Johnny, 
  
 Is there any update from WPF team? 
  
 Here is the configuration of our Server: 
  
 Server configuration:  
 Windows Server Enterprise Service Pack 1  
 Copyright 2007  
 RAM 8.0 G  
 64 bit  
 Processor: Xeon ® CPU E5345 @ 2.33 G  
  
 IIS Configuration  
 V7.0  
 Default POOL(Pipe Line): Integrated Mode. 
  
 Regards, 
 Anil

Hi Johnny, 
  
 The problem is not duplicated on Samples or with WMS Server running on Dev/Test license.  
 The problem is duplicated when consuming maps using TiledWMSLayer (MultipleTile) from Production server. 
  
 Is there any difference between the Production license v/s Dev licence in terms of rendering for  client using TiledWMSLayer? 
  
 Regards, 
 Anil

 


Anil,
I’m sure there is no difference between production and Development license. I also have talked to Wpf team, but the problem is that we are unable to recreate this issue. Can you make a small demo to recreate it if it’s availed?  
Thanks,
Johnny

Hi Johnny, 
  
 I am using the WPF clicent using TiledWMSOverlay as suggested in the forum support. For the server side I have already sent in the info (Server side info)  in my previous post on this thread. Let me know if this is sufficient.  
  
 Regards, 
 Anil

Anil,


I’m sorry that I didn’t get any server side code or demo besides one picture. Can you have a check and send it to us again. Sorry for the inconvenience.
Thanks,
Johnny

Hi Johnny, 
  
 I am getting the same problem (some tiles not renderdered properly) when using Sample Plugins  like "DisplayASimpleMapWithWMSLayerPlugin" our Production server when using WPF client using TiledWMSLayer with MultipleTile. 
  
 However amazingly if the WPF Client is inovoked using TiledWMSLayer with two URIs  (corresponding to two WMS applications running i.e with two different URI on same physical machine) then the problem goes away. Is there some limitation or a bug that prevents TiledWMSLayer to render tiles properly with one URI.? We are afraid if there is large number of clients invoking WMS the same problem will reappear. 
  
 Regards, 
 Anil

Hi Anil, 
  
 Desktop Application is different than the applications on the browser. For Web or Silverlight, you don’t need to consider the request balance to the server; while the browser handles  for you. But Desktop doesn’t have a similar strategy; so that we need to handle this. In general, LayerOverlay is container to hold layers, and ask the layers to draw. It’s a general operation; nothing special. But The WmsLayer is a special one in desktop with multi-thread. LayerOverlay cannot handle the request count at one time and the server might throw HTTP 500 exception. Here we recommend using TiledWmsOverlay instead which will limits 4 requests will be sent and the others will be hold on until the previous 4 requests are responded. On the other hand, use TileWmsOverlay has better performance. It requests images directly to the server; while using layer, it requests several images from the server and combine them into one entire image; then display on the map. So some requests will be duplicate requested using layer.  
  
 Hope it makes sense and let me know if you have more queries. 
  
 Thanks, 
 Howard

Hi Howard,


Thanks for explaination in your reply.   In my previous posting dated 10/19/10 read "TiledWMSOverlay" instead of TiledWMSLayer.


Based on my testing it seems TiledWMSOverlay renders correct tiles (with great speed) only when invoked with 2  (or pehaps more) URIs. With one URI, I don't get good results nor speed. Please suggest a  better strategy for correct usage of TiledWMSOverlay.


Regards,


Anil



 


Hi, Anil
I think Howard has clarified why you need to use TiledWmsOverlay instead of TiledWmsLayer. In fact, the TiledWmsOverlay inherits from WmsOverlay and it only adds one extra functionality that is to let users can sign the URI depending on the ClientId and PrivateKey. So if you don’t need this feature, please try to use WmsOverlay directly.
 
In order to get better user experience and reduce the server-side load and I suggest that you can add multiple WMS Server URIs to the ServerUris collection, and then the WmsOverlay will randomly send requests to those WMS servers in a concurrent fashion, and that means that the tile images can come from different WMS servers, thus greatly enhancing performance.
 
If you have any additional questions, please let us know.
 
Thanks,
 
Khalil