infuze iis module user guide

WURFL InFuze Module for IIS: User Guide

This document will help you install and configure WURFL IIS on Windows Server 2003, 2008, and 2012. WURFL IIS is an IIS ISAPI plugin that adds selected HTTP headers to every request received by IIS Server. Added headers will contain values for the WURFL Capabilities selected in the configuration file related to the User Agent of the current request.

Installing the WURFL InFuze Module for IIS

WURFL IIS is distributed as a Windows installer package for 64 bit Windows versions.

Once the package is installed, go to your Server Manager -> IIS Manager, select the site you want to add WURFL IIS to -> ISAPI FIlter -> Add : Filter Name : WURFL IIS, Executable :
C:\Program Files\Scientiamobile\WURFL ISAPI\wurfl-isapi.dll

Warning: Since version the installation of libwurfl for Windows or greater is required and the default installation folder is C:\Program Files\Scientiamobile\WURFLIsapi\


Once the plugin is installed, navigate to your installation folder and edit the wurfl-conf.xml configuration file to inject the headers that your web application will need.

For example:


    <WurflIIS name="default" site="localhost">


        <!-- WURFL Updater allows seamless update of WURFL engine with new data downloaded from Scientiamobile. -->
        <!-- Updater configuration must be done after <WurflRoot> -->
        <!-- Put your personal updater url taken from Scientiamobile customer Vault. -->
        <!-- WURFL Updater url file type and WurflRoot must match (.zip or .xml.gz ) -->
        <!-- Valid values for the updater checking frequency (how often the updater checks for any new WURFL data file -->
        <!-- to be downloaded and used by the engine) are DAILY,WEEKLY  (default value is DAILY) -->
        <!-- Updater log file (wurfl-updater-log.txt) may be found in WURFL Isapi installation folder. -->
        <!-- The folder and WURFL data file must writable by IIS -->
        <!-- <WurflUpdater frequency='DAILY'></WurflUpdater> -->

        <!-- <WurflPatch>patch.xml</WurflPatch> -->
        <!-- <WurflPatch>...</WurflPatch> -->
        <!-- <WurflPatch>...</WurflPatch> -->

        <!-- default -->
        <!-- <WurflEngineTarget>accuracy</WurflEngineTarget> -->

        <!-- default -->
        <!-- <WurflUserAgentPriority>use_plain_user_agent</WurflUserAgentPriority> -->

        <WurflCache params="100000,30000">double_lru</WurflCache>
        <!-- default -->
        <!-- <WurflCache>null</WurflCache> -->

        <!-- By default wurfl capability names are mapped to WURFLCAP_[upper(capability name)] http header
            hence for example capability ux_full_desktop will be mapped to HTTP header

        <!-- You may have a custom HTTP header name specified in the tag attribute "header" -->
        <WurflRequestCapability header="DEVICE_OPERATING_SYSTEM">device_os</WurflRequestCapability>


        <!-- Urls blacklist: all urls matching the following regex will be excluded from wurfl headers injection -->
        <!-- <WurflDoNotProcessUrl> -->

            <!-- Excludes all .ico files from processing-->
            <!-- <WurflUrl name="BlackList-Rule-1">.*\.ico</WurflUrl> -->

            <!-- Excludes all files in "img" folder from processing-->
            <!-- <WurflUrl name="BlackList-Rule-2">.*\/img\/.*</WurflUrl> -->

        <!-- </WurflDoNotProcessUrl> -->

        <!-- Urls whitelist: all urls matching the following regex will be injected with wurfl headers -->
                <!-- if no WurflProcessUrl section is present default action is to inject, no need for a catchall rule -->
        <!-- <WurflProcessUrl> -->

            <!-- Includes all .jpg files in processing-->
            <!-- <WurflUrl name="WhiteList-Rule-2">.*\.jpg</WurflUrl> -->

        <!-- </WurflProcessUrl> -->

        <!-- <WurflLogHeaderInjection>true</WurflLogHeaderInjection> -->
        <!-- default -->
        <!-- <WurflLogHeaderInjection>false</WurflLogHeaderInjection> -->



You can insert as many <WurflRequestCapability> tags as you need in your wurfl-conf.xml file, with each capability (or virtual capability) resulting in a new HTTP header. A full list of capabilities can be found here.

Configuration Tags

Tag Description Availability
<WurflIISServer> Aggregates the WURFL engines configurations for local IIS Server
<WurflIIS> Contains the configuration for a subset (WURFL engine) of the web sites hosted by local IIS Server
name: a simbolic name for the web sites managed ny the nested configuration, for logging purposes
site: a regex representing the urls of web sites managed by the nested configuration. WURFL Isapi filter will check the HTTP Request against this regex to determine wich WURFL engine will manage the incoming HTTP Request.
<WurflRoot> Defines the location (path) of the WURFL data file.
Value:: the full path of WURFL data file
<WurflUpdater frequency="DAILY"> Allows seamless update of WURFL engine with new data downloaded from Scientiamobile.
The tag <WurflRoot> must precede it.
Type:not mandatory
Value:: the data url (taken from your personal Scientiamobile Vault account, choosing between two data file types: .zip or .xml.gz)
Take care that <WurflRoot> file type and <WurflUpdater> data url file type match so you may need to change the <WurflRoot> file type accordingly.
Attributes:frequency (how often the updater checks for any new WURFL data file to be downloaded and used by the engine) whose value you can choose between DAILY and WEEKLY (default value is DAILY)

In order to let the Updater perform its activities both the <WurflRoot> folder and file must be writable by IIS.
The wurfl-updater-log.txt file in WURFL Isapi installation folder will contains details on Updater activity.
<WurflPatch> Adds one or more custom patch files to the WURFL repository.
Type:not mandatory
Value:: the full path of patch file
<WurflEngineTarget> Choose between accuracy WURFL_ENGINE_TARGET_HIGH_ACCURACY or performance WURFL_ENGINE_TARGET_HIGH_PERFORMANCE targets. In Performance mode, desktop web browser detection is done programmatically without referencing the WURFL data. As a result, most desktop web browsers are returned as generic_web_browser WURFL ID for performance. If either Performance or Accuracy are not defined, Performance mode is enabled by default.
Type:not mandatory
<WurflCache params="10000,5000"> The caching strategies are also configurable. You can choose between NULL, LRU or Double LRU cache mechanisms. The default is Double LRU, which is a two-cache strategy (one going from User-Agent to Device-Id, the other from Device-Id to Device). The default parameters are 30,000, 10,000 (maximum 30,000 elements for the User-Agent to device-id cache and maximum 10,000 elements for the device-id to device cache) and the values are in elements. The LRU cache comes with User-Agent to Device mapping only, and the NULL parameter will disable the cache mode. These parameters refer to the max capacity size of the cache itself in Kilobytes. For more information, please see LRU Cache Mechanism.
Type:not mandatory
<WurflRequestCapability> Defines one or more WURFL Capabilities values to be injected in the Request as HTTP headers.
Type:not mandatory
<WurflUserAgentPriority> Choose between these two options in order to decide the useragent priority to use. override_sideloaded_browser_user_agent tells WURFL to use the sideloaded browser user agent for device detection, while use_plain_user_agent tells WURFL to use the plain user agent instead.
Type:not mandatory
<WurflLogHeaderInjection> Logs header injection activity
Type:not mandatory
Value:true/false (default value is false)
<WurflDoNotProcessUrl> Urls blacklist section: all urls matching the contained regex will be excluded from wurfl headers injection.
<WurflProcessUrl> Urls whitelist section: all urls matching the contained regex will be injected with wurfl headers.
<WurflUrl> An url to match
Context:<WurflProcessUrl> <WurflDoNotProcessUrl>
Value: the regex representing the url
Attributes:name: a simbolic name for the url, for logging purposes


2017 ScientiaMobile Incorporated All Rights Reserved.

NOTICE: All information contained herein is, and remains the property of ScientiaMobile Incorporated and its suppliers, if any. The intellectual and technical concepts contained herein are proprietary to ScientiaMobile Incorporated and its suppliers and may be covered by U.S. and Foreign Patents, patents in process, and are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is strictly forbidden unless prior written permission is obtained from ScientiaMobile Incorporated.