Correction:

Changing the WMS online resource does work if the mapfile is written correctly. 
I had to add VALIDATION also into MAP->WEB

WEB
    METADATA
"wms_onlineresource" 
"http://localhost:8060/cgi-bin/mapserv.exe?map=c:\ms4w\apps\wms-wfs.map&db=%db%";
    END #metadata
     VALIDATION
             "db" "[a-z]+"
    END #validation
END #WEB

Now I can send
http://localhost:8060/cgi-bin/mapserv.exe?map=c:/ms4w/apps/wms-wfs.map&service=wms&version=1.3.0&request=getcapabilities&db=wms-wfs

and get
<OnlineResource 
xlink:href="http://localhost:8060/cgi-bin/mapserv.exe?map=c:\ms4w\apps\wms-wfs.map&db=wms-wfs&"/>

What is interesting is that the validation rule “[a-z]+” should not accept the 
name of my db “wms-wfs” but it does. Capital letters are accepted as well 
“WMS-WFS”. Because I am on Windows I can even get data with WMS-WFS though the 
name of the db is “wms-wfs.sqlite”.

-Jukka Rahkonen-


Lähettäjä: Rahkonen Jukka (MML)
Lähetetty: 16. toukokuuta 2016 14:24
Vastaanottaja: 'G. Allegri'; [email protected]
Aihe: Re: [mapserver-users] runtime CONNECTION string partial substitution

Hi,

I made a test with your VALIDATION and CONNECTION and changing  db on-the-fly 
works. How did you test?  If you use some WMS client for testing it is good to 
remember that variable substitution does not have an effect on the 
GetCapabilities document so that the GetMap URL would be updated automatically. 
Therefore WMS clients like QGIS or OpenJUMP will drop the &db= parameter from 
the GetMaps if you do not tell them not to trust the advertised GetMap URL.

According to documentation http://mapserver.org/cgi/runsub.html  it should also 
be possible to use variable substitution also in MAP- WEB: METADATA. I tried
to use
"wms_onlineresource" 
“http://localhost:8060/cgi-bin/mapserv.exe?map=c:\ms4w\apps\wms-wfs.map&%db%<http://localhost:8060/cgi-bin/mapserv.exe?map=c:\ms4w\apps\wms-wfs.map&%db%25>”

but GetCapabilities response contains the variable %db% literally
<OnlineResource 
xlink:href="http://localhost:8060/cgi-bin/mapserv.exe?map=c:\ms4w\apps\wms-wfs.map&%db%&;<http://localhost:8060/cgi-bin/mapserv.exe?map=c:\ms4w\apps\wms-wfs.map&%db%25&;>"/>

It seems that for getting a proper error message when &db= is missing or it is 
wrong a WMS GetMap request is required. WFS GetFeature triggers the error
and is easier to write by hand, for example:
http://localhost:8060/cgi-bin/mapserv.exe?map=c:/ms4w/apps/wms-wfs.map&service=wfs&version=2.0.0&request=getfeature&typename=states&db=foo
sends an error
<ows:ExceptionText>
msOGRFileOpen(): OGR error. Open failed for OGR connection in layer `states'.  
File not found or unsupported format.
</ows:ExceptionText>

Document http://www.mapserver.org/optimization/debugging.html contains good 
advice for debugging.

-Jukka Rahkonen-


G. Allegri wrote:

Hello,
I'm trying to define a layer where the Sqlite DB connection should be set 
dynamically through runtime sustitution.

e.g.

LAYER
    NAME mylayer
    TYPE POINT
    CONNECTIONTYPE OGR
    VALIDATION
        "db" "[a-z]+"
    END
    CONNECTION "/var/www/dbs/%db%.sqlite"
    DATA "mytable"
END

The point layers works fine if  %db% is set statically but if I try to define 
it through get query values nothing is returned:

http://localhost/cgi-bin/mapserv?map=mymapfile.map&db=mydb

The documentation says that runtime sustitution should work for CONNECTION 
param too. What am I doing wrong?

Thanks,
Giovanni

--
Giovanni Allegri
http://about.me/giovanniallegri
Gis3W - http://gis3w.it
Ikare - http://ikare.it
Twitter: https://twitter.com/_giohappy_
blog: http://blog.spaziogis.it
GEO+ geomatica in Italia http://bit.ly/GEOplus
_______________________________________________
mapserver-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapserver-users

Reply via email to