ThinkGeo.com    |     Documentation    |     Premium Support

WMS permissions

I have to pass username/password credentials to my WMS service. How do I pass this information in the WMS layer? At present, when I run a customized version of the sample application (LoadAWmsLayer) I am prompted for a username/password via a popup dialog in IE. Once I supply this information, a series of tiles appears on the web page with the red Xs in each tile.


So, how do I pass username/password to the WMS service?


Next, how can I troubleshoot matters when no images appear in the web page for the WMS layer, only the tiles with the red Xs therein?


Thanks!



Hi Gregory,



To set the credential to WmsRasterLayer, you need to implement ICredentials interface, and set your own credential object to its Credentials property. For example:wmsRasterLayer.Credentials = new MyCredential();
public class MyCredential : ICredentials
{
    public NetworkCredential GetCredential(Uri uri, string authType)
    {
        NetworkCredential myCredential = new NetworkCredential("UserName", "Password", "Domain");
        return myCredential;
    }
}

We don’t have any event to handle the tile faild, but we can change the default pink tile to another color on client-side, please see the code below.var OnMapCreating = function(map) {
    OpenLayers.onImageLoadErrorColor = "Blue";
}

Any questions please let me know.



Thanks,



Howard



Thanks for the answer! How do I set the credentials in the WMS overlay? Here's the code, straight out of the LoadAWmsLayer sample:


        protected void Page_Load(object sender, EventArgs e)

        {

            if (!Page.IsPostBack)

            {

                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush

                      (GeoColor.StandardColors.White);

                Map1.CurrentExtent = new RectangleShape(-131.22, 55.05, -54.03, 16.91);

                Map1.MapUnit = GeographyUnit.DecimalDegree;


                WmsOverlay wms = new WmsOverlay("WMS Overlay");

                wms.Credentials = new MyCredential();  <-- no property called 

                                                                                                                                <-- Credentials in the WmsOverlay class!

                wms.ServerUris.Add(new Uri(MYURL));

                wms.TileType = TileType.MultipleTile;

                wms.TileHeight = 256;

                wms.TileWidth = 256;


                Map1.CustomOverlays.Add(wms);

            }

        }


 



Hi Gregory, 
  
 Sorry, as far as I know, credentials can only be send by Post method while WmsOverlay use simple get method; so currently, it’s impossible to access your wms server with WmsOverlay.  
  
 I’ll let you know when I have new ideas, if you have any questions please let me know. 
  
 Thanks, 
  
 Howard

Fair enough. Next problem! 
  
 When I use Firefox, I am prompted with a dialog box that asks me for user name and password. When I provide the user name and password, the WMS overlay proceeds to "load" the tiles. A message appears in the status bar on the Firefox browser that reads: 
  
 Connecting to <my WMS provider>… 
 Transferring data from <my WMS provider>… 
  
 For a few seconds; then the pink "error" tiles load into the web browser. These pink error tiles are then replaced with solid white tiles. 
  
 I can zoom in and out, pan the map, etc. and the same behavior repeats, but I do not see the imagery provided by my WMS provider. 
  
 How do I troubleshoot this? 
  
  


Hi Gregory, 
  
 I configed a WMS Server to test the credentials with WmsOverlay, when I input my user name and password in the opened dialog, it works fine. 
  
 Could you please right click on one of the white tiles and copy its address to a new browser and see if it returns an image. If not, there may be some issue with the credentials. 
  
 Currently, we can’t handle much about the credentials with WmsOverlay and we’ll let you know when we have new ideas. Please use WmsRasterLayer instead temporary. 
  
 Any questions please let me know. 
  
 Thanks, 
  
 Howard 


Howard, thanks for the response!


I right-clicked on some of the images in the tiled web page, and here's an example of the URL that was produced:


<MYURL>?REQUEST=GetCapabilit...HEIGHT=256


If I copy & paste the URL into the browser window, the output is the GetCapabilties XML document.


I changed the above URL to:


<MYURL>?REQUEST=GetMap&L...HEIGHT=256

 


... substituting GetMap for GetCapabilites, and a tile displays in the browser window.


So it seems that the WMS overlay is using the GetCapabilities parameter to request each tile, and not the GetMap parameter.


I am not adding the GetCapabilities parameter to the WMS overlay via the Parameters collection, so I can't fathom why the WMS layer is not switching over to GetMap when it requests an individual tile.


The WMS provider does support the GetMap capability. Here's a snippet from their GetCapabilities XML document:


<Capability>

    <Request>

        <GetMap>

            <form>at>image/jpeg</Format> 

            <DCPType>


I will try out the WmsRasterLayer approach, since I still have a permissions issue when I browse the tile.


Thanks!


 


 



Well, you can’t see the snippet because it’s in XML and the browser stripped away the tags (duh) but trust me, it’s there!

Ha ha! I’ve gotten my WMS layer to work with the raster overlay, but now I need to figure out how to get the traditional roads/satellite/hybrid method working for my WMS provider using the StaticOverlay… Is it possible using the StaticOverlay?

I need to figure out how to get the traditional roads/satellite/hybrid method working for my WMS provider using the StaticOverlay… Is it possible using the StaticOverlay?

Hi Gregory, 
  
 It’s possible to add your WmsRasterLayer to StaticOverlay which is actually type of LayerOverlay, and it maintains a Layer collection; WmsRasterLayer inherits from Layer, so you can add it into the StaticOverlay. 
  
 If you have more questions please let me know. 
  
 Thanks, 
  
 Howard