ThinkGeo.com    |     Documentation    |     Premium Support

Setting Up Premium Users

Hello,


  In the WMS Server readme.rtf, it states: "If your server is consumed by a desktop application, a private key and a "Client Id" are required when accessing your World Map Kit server. You need to provide the private key to the customer after they have registered a valid "Client Id"."  Would you please explain and give an example each of private key and Client Id.  I am assuming a client id is just a natural number, but I am unsure of what the key would consist of.  Is it a guid, a certificate, or what.  Also, where would this data be in the desktop client?  Would you supply some code or a hyperlink to some code demonstrating how to apply this functionality.?


Best Regards,


  Steven



 


Hi, Steven
World Map Kit Server validates desktop application users with a Client ID and a signature associates with it. At the server side, you may have noticed that there are two .txt files contained in the App_Data folder, Domains.txt and UserClients.txt. If you’re going to provide map service to desktop applications, to access to World Map Kit Server, the client application is supposed to provide a ClientId and a signature generated from a PrivateKey associated with this ID and other information in the WMS request. World Map Kit Server will check every GETMAP request to see whether the Client ID and Private Key is valid by generating the signature in the same way the client application generated it, if the signature equals the one comes from client request, it suggests the request comes from a valid client, otherwise, this maybe an invalid request and the server will ignore the request.
As for the format of Client ID, it can be a name, a GUID, a natural number or something else without the special character ‘\t’ which is used as a splitter by the UserClients.txt, and the UserClient.txt is formatted with a single pair of ClientId and PrivateKey on each line. Below is an example of how UserClients.txt is formatted.
Client1 asdf1234
Client2 12345678
“Client1” here is a ClientId and it is associated with the PrivateKey “asdf1234”, and on the second line, it’s another ClientId with its PrivateKey.
As you can see, to apply this functionality doesn’t require any additional code on World Map Kit Server, just a few configuration steps are needed, and at the client application side, you only have to add to request parameters in the URL of GETMAP request, ClientId and Signature.
If you have any question in how to generate the signature for validation, you can contact our support to get the code of the encryption algorithm.
Any further questions please let us know.
Thanks.
James

James, 
   Thank you for your reply.  I am not calling GetMap.  Here is my code that loads the map, please advise. 
  
  
                 winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean); 
                 winformsMap1.MapUnit = GeographyUnit.DecimalDegree; 
  
                 TiledWmsLayer tiledWmsLayer = new TiledWmsLayer(new Uri(ConfigurationManager.AppSettings["WMSServer"])); 
                 tiledWmsLayer.ActiveLayerNames.Add("WorldMapKitLayer"); 
                 tiledWmsLayer.ActiveStyleNames.Add("WorldMapKitDefaultStyle"); 
  
                 LayerOverlay staticOverlay = new LayerOverlay(); 
                 staticOverlay.Layers.Add("SimpleWmsLayerPlugin", tiledWmsLayer); 
                 staticOverlay.IsBase = true; 
                 winformsMap1.Overlays.Add(staticOverlay); 
  
                 FileBitmapTileCache bitmapTileCache = new FileBitmapTileCache(); 
                 bitmapTileCache.CacheDirectory = @"C:\Temp\FileCacheTiles"; 
                 bitmapTileCache.CacheId = "World02CachedTiles"; 
                 //bitmapTileCache.TileAccessMode = ReadOnlyAttribute; 
                 bitmapTileCache.ImageFormat = TileImageFormat.Png; 
  
                 staticOverlay.TileCache = bitmapTileCache; 
  
 Regards, 
   Steven

James, 

I set up the userclients.txt on the WMS Server, added the ClientId and PrivateKey code to the client: 




TiledWmsLayer tiledWmsLayer = new TiledWmsLayer(new Uri(ConfigurationManager.AppSettings["WMSServer"])); 



tiledWmsLayer.ClientId = "Client1"; 

tiledWmsLayer.PrivateKey = "A188537A12604737A2EDD3CDBD78CCA0"; 



tiledWmsLayer.ActiveLayerNames.Add("WorldMapKitLayer"); 

tiledWmsLayer.ActiveStyleNames.Add("WorldMapKitDefaultStyle"); 



And I am still getting the watermarks.   Please advise. 



Regards, 

Steven



 


Hi Steven,
As far as I can see, there is nothing wrong with you code sample, and I’ve successfully applied your code to my test application. However, after configuring my World Map Kit Server, the result I got on Map control is a world map without any watermark on top of it. I hate to bother you but could you please double check the configuration file “UserClients.txt” on your World Map Kit Server? In your case, the content should be in a format as below:
Client1 A188537A12604737A2EDD3CDBD78CCA0
Please note that the splitter is a TAB character, that’s important, otherwise the server will not recognize the configuration information and cannot parse it successfully. 
If you are sure about the format of the content, the only reason I can imagine that the watermarks wouldn’t go away is that maybe it’s caused by the TileCache set to the LayerOverlay. Could you please try to clean up the cached image and try again?
Hope these suggestions will be useful.
Thanks.
James

James,


  I got it, it was the Tab character used for the splitter.  I was using a space.


Thanks,


  Steven



Steven, 
  
 I am glad you solve the problem. 
  
 Just feel free to let me know if you have more questions. 
  
 Thanks, 
 James