ThinkGeo.com    |     Documentation    |     Premium Support

Error adding map to app for first time

Hi,


 


I am attempting to add a Map to an existing web app. I debugged the Map display and code in another smaller test app and I now trying to drop the Map code (.aspx and .cs) into the bigger app.


It appears the Map control is trying to save a configuration file and having access denied.


Some of the things i have tried:


* open up the directories from the root to bottom level so that anyone can write files (and i tested it from Notepad).


* Removed all the asp.net temp files in Windows\...


* reboot and re-start apps, IDEs, IISs, etc.


* comment out the Map occurance and backing code and it works OK (obviously no Map :-) so I know the problem only occurs when the Map is trying to render.


* Created all sorts of breakpoints in the page like at OnPrerender, OnLoad, etc. and they provide no help. When the PageLoad method exits, the browser then displayus the error message.


 


First: what is Map trying to do here?


What is in the .tmp file it is apparently trying to create


Any ideas on how to proceed from this?


I get the following error page when trying to load the page with the map in it:


Any help?


 


TIA,


paul


--- caution: code follows 


    


            

Server Error in '/FieldCheckSite' Application.


            

 Configuration Error 


            


             Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

            


             Parser Error Message: An error occurred loading a configuration file: Access to the path 'C:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\qj6yznga.tmp' is denied.


            Source Error: 


            

               

                  

                      


[No relevant source lines]


                  

               

            


            


             Source File:  C:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\web.config    Line:  0

            


            



            Version Information: Microsoft .NET Framework Version:2.0.50727.3603; ASP.NET Version:2.0.50727.4028


            


    




[UnauthorizedAccessException]: Access to the path 'C:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\qj6yznga.tmp' is denied.

   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)

   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)

   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)

   at System.CodeDom.Compiler.TempFileCollection.EnsureTempNameCreated()

   at System.CodeDom.Compiler.TempFileCollection.AddExtension(String fileExtension, Boolean keepFile)

   at System.CodeDom.Compiler.TempFileCollection.AddExtension(String fileExtension)

   at System.Configuration.Internal.WriteFileContext..ctor(String filename, String templateFilename)

   at System.Configuration.Internal.InternalConfigHost.StaticOpenStreamForWrite(String streamName, String templateStreamName, Object& writeContext, Boolean assertPermissions)

   at System.Configuration.Internal.InternalConfigHost.System.Configuration.Internal.IInternalConfigHost.OpenStreamForWrite(String streamName, String templateStreamName, Object& writeContext, Boolean assertPermissions)

   at System.Configuration.Internal.InternalConfigHost.System.Configuration.Internal.IInternalConfigHost.OpenStreamForWrite(String streamName, String templateStreamName, Object& writeContext)

   at System.Configuration.Internal.DelegatingConfigHost.OpenStreamForWrite(String streamName, String templateStreamName, Object& writeContext)

   at System.Configuration.UpdateConfigHost.OpenStreamForWrite(String streamName, String templateStreamName, Object& writeContext)

   at System.Configuration.MgmtConfigurationRecord.SaveAs(String filename, ConfigurationSaveMode saveMode, Boolean forceUpdateAll)

[ConfigurationErrorsException]: An error occurred loading a configuration file: Access to the path 'C:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\qj6yznga.tmp' is denied. (C:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\web.config)

   at System.Configuration.MgmtConfigurationRecord.SaveAs(String filename, ConfigurationSaveMode saveMode, Boolean forceUpdateAll)

   at System.Configuration.Configuration.SaveAsImpl(String filename, ConfigurationSaveMode saveMode, Boolean forceSaveAll)

   at System.Configuration.Configuration.Save(ConfigurationSaveMode saveMode)

   at ThinkGeo.MapSuite.WebEdition.Map.x1811944f4031e215()

   at ThinkGeo.MapSuite.WebEdition.Map.OnLoad(EventArgs e)

   at System.Web.UI.Control.LoadRecursive()

   at System.Web.UI.Control.LoadRecursive()

   at System.Web.UI.Control.LoadRecursive()

   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

   at System.Web.UI.Page.ProcessRequest()

   at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)

   at System.Web.UI.Page.ProcessRequest(HttpContext context)

   at ASP.ticketimage_aspx.ProcessRequest(HttpContext context) in c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\fieldchecksite\e19a8e7c\46f2af32\App_Web_9_n7lomu.5.cs:line 0

   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()

   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

-->



Paul,



Welcome to Discussion Forums.

Maybe this problem is caused by that you don’t have permission to web configuration file. First off, when the PageLoad method exits, we will register HttpHandlerFactory in the configuration file, and then you could find the code below in the httpHandlers section.


 <add path="*_GeoResource.axd" verb="*" type="ThinkGeo.MapSuite.WebEdition.GeoResourceFactory" />



If you are running ASP.NET Ajax under Internet Information Services 7.0, you also find the code mentioned above in the system.webServer section.



If you still have any problem, please let me know.



Thanks,



Khalil

 



Hi,


Thank you for the help.


I was able to add the http declaration manually to our web.config and got over that hump. BTW, i'm not sure the control should be modifying web.config under any circumstances. Many publishing schemes (e.g. Web Deployment Projects) create a web.config that is produced from multiple components dependinh on build type.


I am working without much documentation past your web site and the API reference so maybe a "first use" description is somewhere I havn't found.


Then i had a problem with our SQL server based session support and the fact that SimpleMarkers are not serializeable. I got around this by disabling Viewstate for the Map control and i finally got the map control to display the markers, popups, map tools and everything but one overlay:  It's missing the base image overlay.


Is viewstate required for the Map control to work correctly and draw all layers and overlays?


tnx,


paul


 











Hi, Paul


Sorry for the inconvenient. We need to register HttpHandler to web configuration file for uses, so it’s necessary to modify the web.config file. If you still feel confused, please refer to the link below about “How To Create an ASP.NET HTTP Handler by Using Visual C# .NET”.


support.microsoft.com/kb/308001


If you want to get familiar with WebEdition for a “first use” description, please refer to QuickStart Guide first off with the link below:


gis.thinkgeo.com/Support/Dis...fault.aspx


Or the online API Documentation:


gis.thinkgeo.com/mapsuite3docs/webedition/


Another thing is about serialization of SimpleMarkerOverlay. We have added serialization functionality to it since last public released. From last week on, uses could get latest Dll packages every day through crm.thinkgeo.com, and for Daily Development Build Download, we will add new features and fix bugs for it, but for Daily Production Build, we will only fix the bugs. So you just need to down WebEdition dll package from any section.


For your last question, Yes, ViewState is required for the Map Control to work correctly. View state, in a nutshell, is used by an ASP.NET Web page to persist changes to the state of a Web Form across postbacks.


If still have any more questions please let me know.


Thanks,


Khalil




Thank you for the bove pointers.


We have downloaded the latest version and are looking into it however there are a few questions.


We are trying to use VirtualEarthLayer as our base layer and we get serialization errors with that object as well (see stack trace below). 


Does the Map control need to serialize all these objects and their children?


Why in general and beyond the reasons in the previous reply does the Map control need to get these objects serialized?


I assume it is because it needs the  Viewstate enabled?  If so, what state does it need?


Can it run w/o Viewstate enabled?


tnx,


paul


 


--- caution stack trace follows... -----


 


[SerializationException: Type 'ThinkGeo.MapSuite.Core.VirtualEarthLayerImageCache' in 

Assembly 'MicrosoftMapLayerExtension, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.]

   System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +7733643

   System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) +258

   System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +111

   System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) +161

   System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) +51

   System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +7631620

   System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +461

   System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +134

   System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1577

 


 


 



Paul, 
  
 Yes, Map control needs to serialize all objects and their children if you store the objects in the storage like ViewState. Could your give us a general description about your application?  The exception is caused by the VirtualEarthLayerImageCache. Please ask for support@thinkgeo.com for an updated “MicrosoftMapLayerExtension” assembly. 
  
 Thanks, 
  
 Johnny, 


Johnny, (Paul I have some notes for you below) 
  
   I have a question about that.  Does you mean that you have to store the map data in viewstate?  I think this is what Paul is getting at?  I thought that if you used session state it didnt need to serialize at all and only when you chose SQL session state it serialized. 
  
 I was also wondering id Paul wants to use Virtual Earth he would use an overlay instead.  Don’t we have a VirtualEarthOverlay so that the user can use that client side? 
  
                  VirtualEarthOverlay ve = new VirtualEarthOverlay(“VirtualEarth Map”);   
                  ve.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings[“VEUri”]);   
                  ve.VirtualEarthMapType = ThinkGeo.MapSuite.WebEdition.VirtualEarthMapType.Road;   
                  Map1.CustomOverlays.Add(ve);   
  
 Paul:  The code above uses virtual earth but on the client side which is much more efficient than the sever side.  The reason we have a VirtualEarthLayer is that the layer is from the core which is shared with the services, web, desktop etc.  Typically we use Layers for most things as it is common between all editions however in the Desktop Edition and Web Edition there are many times when we have more efficient ways of dealing with thing as based on the given technology.  In these cases we make special Overlays instead such as the VirtualEarthOverlay in this case.  The overlays are product specific so that overlay is tuned for the Web Edition, in this case it uses Virtual Earth client side JS library which make it much faster than the Layer version.  To check out a sample go to websamples.thinkgeo.com/ and under the Overlays tree node choose Virtual Earth. 
  
 Let me know if you need more clarification on this. 
  
 David

Hi, 
  
 I was able to get the Map control to work in our environment by changing SessionState to InProc rather than SQLServer. This means the problem we are having is with SimpleMarker and VirtualEarthLayer not serializing correctly. 
  
 We are using a local version of VirtualEarthLayer that refers to our own image server that in turn can use multiple image sources. 
  
 A VirtualEarthLayer is added to a LayerOverlay which is added to the Map control - all in the server. 
  
 We are assuming actual image data is not included in the viewstate and that only non-bulky object state are included. Is this correct? 
  
  
 A few questions: 
  
 Why does the setting for SessionState affect the handling of the viewstate for the map control? (that’s more of a .NET question i guess and i havn’t researched it yet) 
  
 Can these two classes be fixed to serialize correctly with SQLServer SessionState? I read that SimpleMarker was fixed but version 3.1.299 did not seem to have this fix. 
  
 Can the Map be made to run w/o viewstate enabled? 
  
 tnx, 
 p. 


Paul, 
  
 I can take a stab at those questions even though Johnny is the real expert.  First I can now see why you are not using the Overlay version, I just wanted to let you know that exists out there.   
  
 I think there is some confusion around the view state stuff.  From your original post you mentioned view state and I think Johnny refereed to it as well but said things ‘like view state’.  I was a bit confused because I was fairly sure that we don’t serialize the layers etc to view state.  I think what we meant was when you do not use InProc then the serialization engine for ASP.NET is run to serialize things to then move it off to the out of proc storage of choice.  This could be SQL or a state server or to your own place.  To put the stuff in SQL the same serialization that happens with view state needs to happen except it doesn’t go to view state it goes to SQL.  I hope that is a little more clear now.   
  
   The problem is that even though we did allot of testing we haven’t tested every class to make sure it serializes.  The developers test this when they develop classes but it seems to get skipped sometimes or when changes are made it screwed up the serialization.  The answer for us to add mandatory unit tests for serialization for each class.  Right now we have about 3,000+ unit tests but none around the serialization.  I will see about get that add to our process and see when we can schedule getting the existing classes in there.  We shoudl be able to write a script to generate the bult of them.  Ok that’s more info then you needed but I can’t help myself. 
  
 I will also get the issue scheduled to be fixed for the layer you need and then get that in our production bug fix daily build. 
  
 David 
  


Paul, 
  
  Did you modify the layer at all, I mean did you inherit or anything like that?  Anything you inherit from you need to make sure you mark it serilaizable as an attribute. 
  
 David

Hi, 
  
 Sorry i’m late getting back to this conversation. 
  
 We do subclass from VirtualEarthLayer but it is marked Serializeable. 
  
 Do you know when the next public release will be that should have a fix to this problem ?     (namely, Map can live w/o viewstate enabled or the SimpleMarker and VirtualEarthLayer classes serialize ok) 
  
 tnx, 
 p

 


Paul,
 
Just as David said, the serialization will happen if you store the SessionState into SQL server, so it requires all the used classes marked with Serializeable attrbution. 
 
I think using VirtualEarthOverlay is much faster than using VirtualEarthLayer. VirtualEarthOverlay is implemented by pure Js liberary and requests the VirtualEarth image server that has pre-generated the tile images. However, the VirtualLayer requests data server and drawing the images on the fly.
 
We have fixed the serializeable issue of SimpleMarkerOverlay and VirtualEarthLayer. You can download the updated DLL webedition DLL package from helpdesk.thinkgeo.com. If you have any question about downloading please refer to gis.thinkgeo.com/Support/Dis...fault.aspx. Please ask support@thinkgeo.com for an updated “MicrosftMapLayerExtension” that contains “VirtualEarthLayer”. 
 
Any question please let me know, thanks.
 
Johnny,

David, 
  
 We store the map configuration both into ViewState and Session. The serialization will not happened if we use SessionState as InProc and only when we choose SQL Server it needs. 
  
 Thanks, 
  
 Johnny, 


Thank you. 
  
 I have downloaded the latest developer build and will start working with it right away. 
  
 tnx, 
 p.

I copied the latest DLLs from the Daily developmet build download and got this: 
  
 What do I have to do to use these .DLLs? 
  
 Server Error in ‘/FieldCheckSite’ Application. 
 -------------------------------------------------------------------------------- 
  
 The evaluation edition has not been installed.  
 Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.  
  
 Exception Details: System.InvalidOperationException: The evaluation edition has not been installed. 
  
 Source Error:  
  
  
 Line 106:      
 Line 107:      
 Line 108:              <cc1:Map ID=“Map1”  
 Line 109:                 runat=“server”  
 Line 110:                 Width=“100%”  
   
  
 Source File: c:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\TicketImage.aspx    Line: 108  
  
 Stack Trace:  
  
  
 [InvalidOperationException: The evaluation edition has not been installed.] 
    ThinkGeo.MapSuite.Core.x6d719af406ea4c2c.x9c99cf4f2a082282() +105 
    ThinkGeo.MapSuite.Core.x6d719af406ea4c2c.x12e7df23649722cf(Double x86d4512e4c7d8814, String x34decc57f0820440, Double xaee3bf422e2fd725, x1acec04cd58c1af5 xa798986acdb65a29, Double xe21f77686f8b957e, x1acec04cd58c1af5 x495f4164830ffad5) +29 
    ThinkGeo.MapSuite.Core.GeoColor…ctor(String name, x32ed2540aa73da36 colorType, Int32 alpha, Int32 red, Int32 green, Int32 blue) +83 
    ThinkGeo.MapSuite.Core.StandardColors.get_Transparent() +84 
    ThinkGeo.MapSuite.Core.ZoomLevel…ctor(Double scale) +85 
    ThinkGeo.MapSuite.Core.ZoomLevelSet…ctor() +762 
    ThinkGeo.MapSuite.WebEdition.Map…ctor(String id, Int32 width, Int32 height) +134 
    ThinkGeo.MapSuite.WebEdition.Map…ctor() +102 
    ASP.ticketimage_aspx.__BuildControlMap1() in c:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\TicketImage.aspx:108 
    ASP.ticketimage_aspx.__BuildControl__control6() in c:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\TicketImage.aspx:106 
    ASP.ticketimage_aspx.__BuildControl__control5(HtmlTableCellCollection __ctrl) in c:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\TicketImage.aspx:105 
    ASP.ticketimage_aspx.__BuildControl__control4() in c:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\TicketImage.aspx:105 
    ASP.ticketimage_aspx.__BuildControl__control3(HtmlTableRowCollection __ctrl) in c:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\TicketImage.aspx:104 
    ASP.ticketimage_aspx.__BuildControlMainMapTable() in c:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\TicketImage.aspx:104 
    ASP.ticketimage_aspx.__BuildControlPanel1() in c:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\TicketImage.aspx:65 
    ASP.ticketimage_aspx.__BuildControlform1() in c:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\TicketImage.aspx:62 
    ASP.ticketimage_aspx.__BuildControlTree(ticketimage_aspx __ctrl) in c:\Dev\cvtFieldCheck\2.1.1\Presentation\Web\FieldCheckSite\TicketImage.aspx:1 
    ASP.ticketimage_aspx.FrameworkInitialize() in c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\fieldchecksite\e19a8e7c\46f2af32\App_Web_ukkphqek.3.cs:0 
    System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +56 
    System.Web.UI.Page.ProcessRequest() +80 
    System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) +21 
    System.Web.UI.Page.ProcessRequest(HttpContext context) +49 
    ASP.ticketimage_aspx.ProcessRequest(HttpContext context) in c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\fieldchecksite\e19a8e7c\46f2af32\App_Web_ukkphqek.3.cs:0 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 
  
   


Paul, 
  
 This issue is caused by the new DLL you referenced. Please check the following items. 
  
 First of all, please make sure you have replace he reference to the new DLLs; then please make sure you have installed our web edition. If the environment is right, please check whether the version you installed is Evaluation or Full edition. Then download the new build for the right version. If the issue still exists, please provide us the web edition version you installed; such as Web Edition 3.1.299 evaluation. And also provide us the latest downloaded develop version so that we can recreate your issue. 
  
 Thanks, 
 Howard

I think I finally have every thing sorted out now and the control is working OK. 
  
 We downloaded the correct version of the .DLLs and installed the correct version of WebEdition. 
  
 I had to modify our local copy of a class to serialize correctly but that is now working ok as well. 
  
 I would like to thank both of you for all this help. 
  
 p. 


Paul, 
  
 You are so welcome and please feel free to let me know if you have more questions. 
  
 Thanks, 
 Howard