ThinkGeo.com    |     Documentation    |     Premium Support

Error attempting to use code from "Quick Start Guide"

Hello,


I am working through the "Quick Start Guide" and have ended up with this code:


(EDIT: It didn't come over so well, so see below...)



When I run this I get an "ArrayTypeMismatchException": Attempted to access an element as a type incompatible with the array.  I also copied similar code for OpenStreetMap from the samples and get the exact same error.  Any idea what's wrong?


Thanks,


Allen


 





@using ThinkGeo.MapSuite.MvcEdition
@using ThinkGeo.MapSuite.Core
@using System.Configuration;


    @{
        Html.ThinkGeo().Map("Map1", 600, 500)
            .MapBackground(new BackgroundLayer(new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"))))
            .CurrentExtent(-131.22, 55.05, -54.3, 16.91)
            .MapUnit(GeographyUnit.DecimalDegree)
            .CustomOverlays(overlays => overlays.WorldMapKitWmsWebOverlay())
            .Render();
    }




 Allen,


 
Thanks for your post and code, we tried test with the code, but the can't recreate the problem, would you please provide a self-contained sample and computer environment to us and we will test it on a pure OS.
 
Here is a captured video of our test:
screencast.com/t/Lar7ck3qGpA
 
Regards,
 
Gary
 

Good morning, Gary.


Yes, it comes as no surprise that the code works for you!  It was copied right out of the Getting Started guide.


Here are some details of my environment.  If you need anything else, just let me know.


Computer: Dell Precision T1600, 3.3 GHz CPU with 16 GB RAM running 64-bit Windows 7 Professional Service Pack 1

Development: Visual Studio 2010 Professional with Service Pack 1; ASP.NET MVC2 and 4.


When I run the code the Development Server launches and then I get the error:



Below is the stack dump:



Attempted to access an element as a type incompatible with the array.


 



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.ArrayTypeMismatchException: Attempted to access an element as a type incompatible with the array.



Source Error: 




    
        
            
            
Line 5:  
Line 6:      @{
Line 7:          Html.ThinkGeo().Map("Map1", 600, 500)
Line 8:              .MapBackground(new BackgroundLayer(new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"))))
Line 9:              .CurrentExtent(-131.22, 55.05, -54.3, 16.91)
            
        
    



Source File: c:\Users\ahuber\Documents\Visual Studio 2010\Projects\Map Suite MVC Test\HelloWorld\HelloWorld\Views\Home\Index.cshtml    Line: 



Stack Trace: 




    
        
            
            
[ArrayTypeMismatchException: Attempted to access an element as a type incompatible with the array.]
   System.Collections.Generic.List`1.set_Item(Int32 index, T value) +30
   System.Web.Routing.RouteCollection.SetItem(Int32 index, RouteBase item) +60
   System.Collections.ObjectModel.Collection`1.set_Item(Int32 index, T value) +116
   ThinkGeo.MapSuite.MvcEdition.HtmlHelperExtension.ThinkGeo(HtmlHelper helper) +58
   ASP._Page_Views_Home_Index_cshtml.Execute() in c:\Users\ahuber\Documents\Visual Studio 2010\Projects\Map Suite MVC Test\HelloWorld\HelloWorld\Views\Home\Index.cshtml:7
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +207
   System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +97
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +76
   System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +258
   System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +115
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +303
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
   System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +23
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +260
   System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +19
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +177
   System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +92
   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +126
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +45
   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +25
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +61
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +25
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +49
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +28
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +25
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +49
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8970141
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
            

        
    


I have never sent you guys an MVC project so I didn't know what I could and could not strip out and it's kind of big, so I uploaded it to the "ironcompass" folder of the FTP site. 


 



Oh, looks like some of my comments didin’t make it after that stack dump…I never sent an MVC project before and am not sure what I can leave out to shrink it down, so I zipped the whole thing and uploaded it to our “ironcompass” folder on the FTP site. 
  
 Allen

One other thing I just thought of…the Quick Start guide is written for ASP.NET MVC 3, but I have ASP.NET MVC 4 on my computer, so when I started my project I selected “ASP.NET MVC 4 application”.  As noted above, my machine has ASP.NET MVC 2 and 4 and I have been using 4 for another non-mapping project.  (The book I bought was for MVC 4, so that’s why I went with it and it only made sense to use the latest version.)  Could there be an issue there between the code in the guide and MVC 4? 
  
 Allen

I also noticed there is a "Mobile Quick Start Guide" written for MVC 4…I was probably going to eventually get to that one but I thought the generic "Quick Start Guide" was the better place to start.

I’ve ruled out one item…the code from the MVC 4 “Mobile Quick Start Guide” is exactly the same as the code in the “Quick Start Guide” written for MVC 3, so it doesn’t appear there is a coding difference causing this error.

 Hi Allen,


Thanks for your demo, the problem is reproduced with it normally, now I just can make sure there should be something wrong with the configuration of this Mvc project, but sorry that I was unable to determine it, I create a new demo with VS2012 MVC4 and keep every settings as default to simulate the your example, however, everything goes well, the attached is the demo mentioned here, please check it out.


Thanks,


Johnny



MvcApplication_mvc4.zip (628 KB)

Hi Johnny, 
  
 This is very weird!  I would offer to create another project, but since I would do the exact same steps I did the first time I presume the result will be the same as well.  Let me check about this…if upgrading to VS 2012 is the simple solution, I should be able to get that done.  Up to this point I didn’t see any need for VS 2012, but maybe now I have a reason. 
  
 Allen

Hi Allen, 
  
 Thank you very much for reporting this, I will try this with both Vs2010 and VS2012 on some clean Virtual machines to make sure all works fine. If we did find something wrong, we will update the "quick start sample" and let you know.  
  
 Thanks, 
 Johnny

Hi Johnny, 
  
 Good luck with that!  I am going to download a trial of Visual Studio 2012 today, and if that works, will get back to my experimenting with MVC 4.  
  
 Allen

Johnny, 
  
 Unfortunately I have just downloaded a Visual Studio 2012 trial and MVC does not work.  I think the error message is different, however: 
  
 {“Value cannot be null.\r\nParameter name: item”} System.Exception {System.ArgumentNullException} 
  
 I just noticed something: the “Quick Start Guide” says it’s for 6.0.109.0 and higher but the MVC trial I downloaded has 6.0.0.0.  Could that be part of the problem? 
  
 Allen  


 Hi Allen,


Thank you very much for providing further information. We did found where the problem is. When I create the Mvc application using the "Empty" template under Mvc4, the exception "{"Value cannot be null.\r\nParameter name: item"}                System.Exception {System.ArgumentNullException}" shows up, but if use other template, it works fine. The reason is that when we creating a empty Mvc applicaiton, some assemblies is missed in the web.config. Please try adding following module to the web.config which locates the root directory, as far as we tested, everything should fine.



<runtime>


    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">


      <dependentAssembly>


        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />


        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />


      </dependentAssembly>


      <dependentAssembly>


        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />


        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />


      </dependentAssembly>


      <dependentAssembly>


        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />


        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />


      </dependentAssembly>


    </assemblyBinding>


  </runtime>


I guess this specifies the version used for loading the Mvc dlls explicitly. Please have a try.


Thanks,


Johnny





Johnny, 
  
 Ah, this is good to hear.  Is this just for Visual Studio 2012?  I have a Visual Studio 2012 trial on my PC and I guess if this will not work in 2010 I’ll have to get the boss to pay for a 2012 license.  I will try this in both 2010 and 2012 either today or over the weekend. 
  
 Thanks, 
 Allen

Johnny, 
  
 Thanks…that did the trick for VS2012, at least for the first sample in the Quick Start guide.  I’m now going back to follow that guide and will note if I have any more issues. 
  
 Allen

Hello again, 
  
 This didn’t take too long.  I went to the second example (using “cntry02.shp”) and my map now shows “The evaluation has expired”.  I presume this is coming from a MapSuiteCore DLL somewhere but I’m not sure from where.  This computer has on it (1) Desktop Full 5.5, (2) Desktop Full 6.0, (3) Mvc Evaluation 6.0, (4) Routing Evaluation 6.0, (5) Routing Full 6.0. 
  
 In the project I removed and added back in the MapSuite version we are currently using: MapSuiteCore.dll, 6.0.0.92, directly from the bin folder of our desktop app, and it doesn’t help.  The bin folder of the MVC example contains MapSuiteCore.dll 6.0.0.92.  Any ideas? 
  
 Allen

 Hi Allen,


 
Thanks for doing the verification on the web.config issues. The error message "the evaluation has expired..." is thrown from the MVCEdition internally,  that's because the evaluation time is ended. There are 2 ways to resolve the problem:
 
1. Create a license request file using installed "Map Suite Registration Builder" under your installation path, and then send it to support@thinkgeo.com for a evaluation time extension.
2. Upgrade the license to purchased.
 
Hope it helps.
 
Thanks,
Johnny

Hi Johnny, 
  
 When you say “the evaluation time is ended”, are you talking about the MVC trial?  That doesn’t sound right because I just downloaded it a few weeks ago (looks to me like on April 1) PLUS if I go back and change the very same code back to the first example (to WorldMapKit) it still works properly.  (I just did this a minute ago.)  It’s only when I try to load a shapefile (I didn’t try anything else, like SQL Server) that I get the trial expired message on the map.  Maybe it’s too early on a Monday and I’m missing something. 
  
 Allen

Hi Allen, 
  
 We have tested with “MvcEvaluationEdition” on a pure virtual machine with simulating your computer environment which has (1) Desktop Full 5.5, (2) Desktop Full 6.0, (3) Mvc Evaluation 6.0, (4) Routing Evaluation 6.0, (5) Routing Full 6.0. , but the problem still doesn’t show up. 
  
 I guess maybe a possible reason is that the MvcEdition may be installed on this Dev machine before, and then you unistalled it, I just also check the code for this limitation, it should be fine 60days. These watermark can be printed on any layers, such as shapefile, sqlserver etc. Can you create a license extension requirement and send it to support@thinkgeo.com or sales@thinkgeo.com to let them extend the evaluation time? 
  
 Best Regards, 
  
 Johnny