ThinkGeo.com    |     Documentation    |     Premium Support

Problem publishing Map Suite project

I am having a problem publishing my Map Suite project to an IIS 7 Web Server.   The web site runs fine from Visual Studio debugger.  The website runs fine if I publish it to a Windows 2003 / IIS 6 Web server.  However when I publish the site to a 2008 / IIS 7 web server, the map pages just spins and nothing ever comes up.


Any ideas?  Has this occured before.  I tried searchign but couldn't find anything.


Thanks,


Leon


 


 



 


Hi, Leon
Yes, we had encountered the similar problems, which were related with Permissions setting or your web configuration.
Can you check whether you have set the right permission on your web app folder or the source data folder? If that’s no problem, please check whether you have registered the”handlers” in your system.webServer section that’s necessary for running it under IIS 7. The detailed information about it and you can refer to the web.config file in our installed samples.
If they were not work, please give a try to change your Application Pools, such as setting the .NET Framework Version as v2.0 or change the managed pipeline mode.
Anyway, if you still have problems please let us know.
Thanks,
Khalil

Hello Khalil, Thank you for your repsonse: 



I checked the eprsmissions, which looked good. the IUSR account and the Applicaiton pool account both had read/write access to the directory. Just to make sure (this was a non public developemnt server) I have the Everyone full control to the entire web applicaiton directory. Did not work. 



I belive have the handlers configured correct, I compared them to the evaluation project I wrote before we purchased your product. See the web.config pasted below: 



<system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules>
            <!--<add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>-->
            <remove name="ScriptModule"/>
            <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </modules>
        <handlers>
            <remove name="WebServiceHandlerFactory-Integrated"/>
            <remove name="ScriptHandlerFactory"/>
            <remove name="ScriptHandlerFactoryAppServices"/>
            <remove name="ScriptResource"/>
            <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="GeoResource" path="*_GeoResource.axd" verb="*" preCondition="integratedMode" type="ThinkGeo.MapSuite.WebEdition.GeoResourceFactory" />
            <add name="ChartAxd.axd" path="ChartAxd.axd" verb="*" preCondition="integratedMode" type="Dundas.Charting.WebControl.ChartHttpHandler" resourceType="Unspecified"/>
        




The web config was edited for security, conneciton strings, machine key, etc...




I have tried changing the Applicaiton Pool to Classic and Integration and NET Framework Version as v2.0, none of that worked. 



I was unclear on that you were refering to as "the managed pipleline mode". Did you mean the preCondition="integratedMode" key int eh handlers section? What should I try changing it to? 



As always, thanks for your help, 

Leon


 



 


Hi, Leon
 
“The managed pipleline mode" means Integrated or Classic mode, and from your reply I guess that you have given a try for that.
 
Have you tried to publish our installed sample to your IIS? If that still doesn’t work, please provide us the details of this specific error message.
 
Maybe you need to create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "RemoteOnly". To enable the details to be viewable on remote machines, please set "mode" to "Off".
 
Thanks,
 
Khalil

I tried the remote debugging options but didnt get anything.  I reviewed the Event log on the web server and I say this crash in the Applicaiton Log 
  
 "Faulting application w3wp.exe, version 7.0.6002.18005, time stamp 0x49e023cf, faulting module ntdll.dll, version 6.0.6002.18005, time stamp 0x49e03821, exception code 0xc0000374, fault offset 0x000afaf8, process id 0xc3c, application start time 0x01cb8558069e3dee." 
  
 Leon

Well I tracked down the cause of my problem. I am using a Virtual Earth layer but everything else I use is in Decimal Degrees, so I used projection. I copied the dlls to my development IIS 6 server's windows system directory and everything works fine when I publish ti IIS 6. I copied the same DLLs over to my IIS 7 server's windows / System directory but it doesnt work (32-bit 2008). 



I am attaching the copy for my LoadMap function which on IIS 7  causes the browsers to spin and eventually say page not found.  It will produce an error message in the event log that I pasted in my previous entry. I commented out the projection parts and the Map will load (though incorrected since its not projected) 



Could you post a reply to this message for the correct DLLs for using Projection with Server 2008 / 32-bit? 




     protected void LoadMap(double MapMinLong, double MapMaxLat, double MapMaxLong, double MapMinLat,
            int width, int height, string backColor, bool tbEnable)
        {
            //Proj4Projection proj4 = new Proj4Projection();
            //proj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);
            //proj4.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();

            RectangleShape rec = new RectangleShape(MapMinLong, MapMaxLat, MapMaxLong, MapMinLat);
            Map1.CustomOverlays.Clear();
            //Setting up the Map
            Map1.Width = width;
            Map1.Height = height;
            Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml(backColor));
            //proj4.Open();
            //Map1.CurrentExtent = proj4.ConvertToExternalProjection(rec);
            Map1.CurrentExtent = rec;
            //proj4.Close();
            Map1.MapTools.PanZoomBar.Enabled = tbEnable;
            Map1.MapTools.PanZoomBar.IsGlobeButtonEnabled = false;
            Map1.MapTools.MeasureMapTool.Enabled = tbEnable;
            Map1.MapTools.MeasureMapTool.MeasureType = MeasureType.None;

            VirtualEarthOverlay ve = new VirtualEarthOverlay("VirtualEarth Map");
            ve.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings["VEUri"]);
            ve.VirtualEarthMapType = ThinkGeo.MapSuite.WebEdition.VirtualEarthMapType.Shaded;

            Map1.CustomOverlays.Add(ve);
        }


 


Leon,
 
Have you set the right map unit? I guess you need to set it as Meter in your scenario.
 
Also you need to project all of other things in Decimal Degrees with the Projection.
 
 
                Proj4Projection proj4 = new Proj4Projection();
                proj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);
                proj4.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();
 
                RectangleShape currentExtent = proj4.ConvertToExternalProjection(rec);
 
 
Thanks,
 
Khalil

Yes I have everything else Projected correctly.  I can run the entire applicaiton perfectly fine in Visual Studio 2008 AND I can publish the application to a Windows 2003 server with IIS 6.0 
  
 This problem ONLY occurs when publishing the web site to a Windows 2008 IIS 7 Web server. 
  
 In the code that I posted above, I commented out all the projection statements to demonstrate that the map would load without project.  Normally the code includes projection and the mapuints are set on the ASPX map object as Meters.  As I said previous, this all works fine except when publishing to IIS 7. 
  
 I tried just a basic sample project with project and it will not work either.  I am thinking there is a problem with the DLLs that I had to copy to the webserver to be able to use projection.  Do you have any updated DLL… or ones specifivally for Windows 2008 (32-bit) 
  
 I copeied the ones from my deployment SYSTEM32 folder to the system32 folder of the web server.

I just tried publishing another Map Project using Projection to a different IIS 7 web server and I got the same error.


"Faulting application w3wp.exe, version 7.0.6002.18005, time stamp 0x49e023cf, faulting module ntdll.dll, version 6.0.6002.18005, time stamp 0x49e03821, exception code 0xc0000374, fault offset 0x000afaf8, process id 0x12d4, application start time 0x01cb86815ae8f0f2."


Seems to me to be a problem with the projection DLL; Proj4ExtensionX86.DLL or one of it's cohorts. 



Are there updated copies of these DLLs or ones specifically built for IIS7. This particular DLL works fine on an IIS 6 Web server. We have IIS 6 in our development network but when I get ready to delpoy to the customer, it will be IIS 7 so I need to get this working. 



Leon


 



Leon, 
  
 There is no need to use the Proj4ExtensionX86.DLL if you use the Proj4Projection or ManagedProj4Projection. This dll is used for UnmanagedProj4Projection class and it should be placed in the System32 or SysWOW64 folder. 
  
 I also have a test on the clean Windows 2008 X86 with projection project and it works well. So I don’t think this problem is releated with the projection dll. 
  
 I suggest that you add one simple sample without projection to see whether it can work, and if  it also can’t work well, please try to  install the latets installer package on your Windows 2008 machine and  then depoly the installed sample on your IIS 7.0. 
  
 Thanks, 
  
 Khalil

Ok I am not sure I am understanding you.  Let me summarize again what the problem is and what I have done. 
  
 Orignally I did not need projection.  I added project to my code when I used GoogleMaps layer and then Virtual EArth Layer.  I am using Proj4Projection. 
  
 I am using Visual Studio 2008.  When I was programming my project and debugging there was no problem.  The first time I actually published this website to a web server, I used our development Windows 2003 / IIS 6 web server.  I received error message form the published website because it could not find Proj4Extension.DLL.  I added all the DLL from my distribution of ThinkGeo Web Suite to the System32 directory of the development web server.  The applicaiton then ran fine and all functionality was working. 
  
 Later on in the process, I published to our development Windows 2008 / IIS 7 web server since this will be the OS of our client when the project is deployed.  I received the same error message about Proj4Extension.DLL.  I copied the same DLLs I had copied to the IIS server to the IIS 7 server’ system32 directory (both servers are 32bit).  Now on IIS 7, everytime I try and load a map that has a projection, the web site basically times out and I get the following message in the Applicaiton Event Log.  
  
 “Faulting application w3wp.exe, version 7.0.6002.18005, time stamp 0x49e023cf, faulting module ntdll.dll, version 6.0.6002.18005, time stamp 0x49e03821, exception code 0xc0000374, fault offset 0x000afaf8, process id 0x12d4, application start time 0x01cb86815ae8f0f2.” 
  
 I removed the code for projection of the map and the project loads fine.  I made a very basic project and projected the map.  This one line of code being in the Map causes it to crash. 
  
  Map1.CurrentExtent = proj4.ConvertToExternalProjection(rec); 
  
 If instead I do 
  
 Map1.CurrentExtent = rec; 
  
 it will load.  BUT I need projection 
  
 I tried it on a different Windows 2008 / IIS 7 web server and I get the same results.  I am attaching the code for my loadmap function that includes projection. 
  
 
 protected void LoadMap()
        {
            Map1.CustomOverlays.Clear();

            int id = 0;

            if (ddlMapChooser.SelectedValue != “”)
            {
                id = Convert.ToInt32(ddlMapChooser.SelectedValue);
            }
            else
            {
                id = 1;
            }

            //EyascoWebFramework.BLL.Map.Map map = EyascoWebFramework.BLL.Map.Map.GetMapByID(Convert.ToInt32(ddlMapChooser.SelectedValue));
            EyascoWebFramework.BLL.Map.Map map = EyascoWebFramework.BLL.Map.Map.GetMapByID(id);

            Proj4Projection proj4 = new Proj4Projection();
            proj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);
            proj4.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();

            RectangleShape rec = new RectangleShape(map.MapMinLong, map.MapMaxLat, map.MapMaxLong, map.MapMinLat);

            //Setting up the Map
            Map1.Width = map.MapWidth;
            Map1.Height = map.MapHeight;
            Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml(map.MapBackgroundColor));
            //Map1.CurrentExtent = new RectangleShape(map.MapMinLong, map.MapMaxLat, map.MapMaxLong, map.MapMinLat);
            proj4.Open();
            Map1.CurrentExtent = proj4.ConvertToExternalProjection(rec);
            proj4.Close();
            Map1.MapTools.PanZoomBar.Enabled = map.MapShowDashboard;
            Map1.MapTools.PanZoomBar.IsGlobeButtonEnabled = false;
            Map1.MapTools.MeasureMapTool.Enabled = map.MapShowDashboard;
            Map1.MapTools.MeasureMapTool.MeasureType = MeasureType.None;
            //Map1.MapTools.AnimationPanMapTool.Enabled = true;

            //Set the Infobar
            InfoBar.Width = map.MapWidth - 220;

            //GoogleOverlay Googlayer = new GoogleOverlay();
            //Googlayer.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings[“GoogleUri”]);
            //Googlayer.GoogleMapType = GoogleMapType.Physical;
            //Googlayer.IsBaseOverlay = false;

            //Creating the Base layer
            //WorldMapKitWmsWebOverlay mapoverlay = new WorldMapKitWmsWebOverlay();
            //mapoverlay.TransitionEffect = TransitionEffect.Stretching;
            //mapoverlay.IsBaseOverlay = false;

            VirtualEarthOverlay ve = new VirtualEarthOverlay(“VirtualEarth Map”);
            ve.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings[“VEUri”]);
            ve.VirtualEarthMapType = ThinkGeo.MapSuite.WebEdition.VirtualEarthMapType.Aerial;


            LayerOverlay dynamicOverlay = new LayerOverlay(“Feature Layer”);
            dynamicOverlay.IsBaseOverlay = false;

            //Creating the Feature Layer Alarm Icons
            InMemoryFeatureLayer FL = createFeatureLayer(map.MapMinLong, map.MapMaxLat, map.MapMaxLong, map.MapMinLat, id);
            ThinkGeo.MapSuite.Core.Style FS = getFeatureStyle();
            FL.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(FS);
            PointStyle ps = new PointStyle();
            ps.RequiredColumnNames.Add(“stnID”);
            ps.RequiredColumnNames.Add(“display”);
            ps.RequiredColumnNames.Add(“stnName”);
            ps.RequiredColumnNames.Add(“lastValue”);
            FL.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(ps);
            FL.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.OverlappingRule = LabelOverlappingRule.AllowOverlapping;
            FL.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.SuppressPartialLabels = false;
            FL.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.GridSize = 40;
            FL.DrawingMarginPercentage = 50;
            FL.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            FL.DrawingFeatures += new EventHandler<DrawingFeaturesEventArgs>(FL_DrawingFeatures);
            FL.FeatureSource.Projection = proj4;
            dynamicOverlay.Layers.Add(FL);


            //Creating the Feature Layer Text Labels
            InMemoryFeatureLayer FL2 = createFeatureLayer(map.MapMinLong, map.MapMaxLat, map.MapMaxLong, map.MapMinLat, id);
            FL2.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.CreateSimpleTextStyle(“stnName”, “Arial”, 7, DrawingFontStyles.Bold, GeoColor.StandardColors.Black, GeoColor.StandardColors.White, 5, -20, -12);
            FL2.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.RequiredColumnNames.Add(“stnID”);
            FL2.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.RequiredColumnNames.Add(“display”);
            FL2.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.RequiredColumnNames.Add(“stnName”);
            FL2.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.RequiredColumnNames.Add(“lastValue”);
            FL2.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.OverlappingRule = LabelOverlappingRule.AllowOverlapping;
            FL2.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.SuppressPartialLabels = false;
            FL2.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.GridSize = 40;
            FL2.DrawingMarginPercentage = 50;
            FL2.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            FL2.DrawingFeatures += new EventHandler<DrawingFeaturesEventArgs>(FL_DrawingFeatures);
            FL2.FeatureSource.Projection = proj4;
            dynamicOverlay.Layers.Add(FL2);

            //Creating the Feature Layer For Last Values
            InMemoryFeatureLayer FL3 = createFeatureLayer(map.MapMinLong, map.MapMaxLat, map.MapMaxLong, map.MapMinLat, id);
            FL3.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.CreateSimpleTextStyle(“lastValue”, “Arial”, 7, DrawingFontStyles.Regular, GeoColor.StandardColors.Black, -15, 25);
            FL3.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.RequiredColumnNames.Add(“stnID”);
            FL3.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.RequiredColumnNames.Add(“display”);
            FL3.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.RequiredColumnNames.Add(“stnName”);
            FL3.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.RequiredColumnNames.Add(“lastValue”);
            FL3.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.OverlappingRule = LabelOverlappingRule.AllowOverlapping;
            FL3.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.BestPlacement = true;
            FL3.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.GridSize = 40;
            FL3.DrawingMarginPercentage = 50;
            FL3.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.SuppressPartialLabels = false;
            AreaStyle AS3 = AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.LightYellow, GeoColor.StandardColors.Black);
            FL3.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.Mask = AS3;
            FL3.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.MaskMargin = 2;
            FL3.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.AllowLineCarriage = true;
            FL3.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            FL3.DrawingFeatures += new EventHandler<DrawingFeaturesEventArgs>(FL_DrawingFeatures);
            FL3.FeatureSource.Projection = proj4;
            dynamicOverlay.Layers.Add(FL3);

            //Creating the marker layer
            SimpleMarkerOverlay markerOverlay = new SimpleMarkerOverlay(“MarkerOverlay”);
            markerOverlay = createMarkerLayer(id);


            //Creating the Shape Layer from local files
            ShapeFileFeatureLayer shapelayer1 = new ShapeFileFeatureLayer(MapPath(“app_data/MAINS.shp”));
            ShapeFileFeatureLayer.BuildIndexFile(MapPath(“app_data/MAINS.shp”));
            shapelayer1.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.Canal1;
            shapelayer1.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            shapelayer1.FeatureSource.Projection = proj4;

            LayerOverlay ShapeFiles1 = new LayerOverlay(“Shape Layer”);
            ShapeFiles1.IsBaseOverlay = false;
            //Add the Shape Layer to the Layer Overlay Object
            ShapeFiles1.Layers.Add(shapelayer1);
           

            //Add the base map Layer Overlay object to the Map
            //Map1.CustomOverlays.Add(mapoverlay);
            Map1.CustomOverlays.Add(ve);
            //Add the shapefile overlay
            Map1.CustomOverlays.Add(ShapeFiles1);
            //Add feature Layer
            dynamicOverlay.TileType = TileType.SingleTile;
            Map1.CustomOverlays.Add(dynamicOverlay);
            //Add marker Layer
            Map1.CustomOverlays.Add(markerOverlay);

           
            
            


            //Fill chart Types Dropdown Chooser.
            odsChartTypes.SelectParameters[“mapID”].DefaultValue = id.ToString();
            buttonGrid.DataBind();

            Filter(“ALL”);

        }
 
  
 The DLL listed below are the DLL I added to the system32 directory that came from my map suite distribution 
 MapSuiteProjectionX86.DLL 
 MapSuiteRasterTiffX86.DLL 
 msvcp71.DLL 
 msvcr71.DLL 
 Proj4ExtensionX86.DLL 
 TiffWrapperX86.DLL 
  
 and the Folder 
 MapSuiteGeoRasterx86 
  
 What should I do, am I suing projection in my code incorrectly?  Am I putting the DLLs in the wrong place? 
  
 Thanks, 
 Leon

Leon, 
  
 Thanks for your patient. 
  
 Just let you know we are working on it, before you give you a solution, could you try to use ManagedProj4Projection instead of Proj4Projection, it totally our managed code, so you don’t need to reference any other DLLs. 
  
 Please let me know if you have more comments, 
 Thanks 
 James

Thanks James and Khalil


That did it!


Using  ManagedProj4Projection worked for me on IIS 7.  I changed my project over to using this format.  I got the example code from the website in how to use projection from mapunit DecimalDegree to Meter.  You might want to change your examples to using ManagedProj4Projection instead.


Off and running, thanks again.


Leon


NOTE:  using Proj4Projection DOES require the DLL.  It is not managed.  Only using ManagedProj4Projection works without added a DLL to the System32 directory.  And the DLL works with IIS 6 but not IIS 7


 


 



 


Hi, Leon
Thanks for your feedback. The problem you have mentioned does exist. We have added this but to our task list and it will be fixed in the next release.
Thanks again,
Khalil