Since
porting the Maestro API over to target .net standard and making the library truly cross-platform, the SDK story of the Maestro API was left in an somewhat undefined state. If you wanted to use the Maestro API for your own applications, where do you start?
For many milestones since that migration, I have intentionally side-stepped from answering that question until now. For the next milestone of MapGuide Maestro we'll be re-activating the Maestro SDK story in the form of a separate repository that contains:
- Various code samples using the Maestro API
- Source code template for the "Local Native" connection provider that wraps the official MapGuide .net API with instructions on how to roll your own build of this provider
So as a result, I've been re-vamping some of the code samples, especially usage in your own web applications. The last time I touched this code, it was all
ASP.net Web Forms, not exactly a shining example of how best to use the Maestro API in your own web application in our current year.
Obviously, this means we need code samples that demonstrate usage of the Maestro API in
ASP.net core. So in the process of building this modern code sample, I found some interesting challenges.
Firstly, an ASP.net core application runs on its own webserver (Kestrel or IIS express). Our mapagent and built-in viewers are hosted on Apache or your local IIS. Even though in development they would both be on localhost, the web servers listen on different ports, meaning the
same-origin policy is in play, complicating integration.
After some deliberation, I've decided that rather than try to embed the existing AJAX viewer in an iframe (which is what the old webforms sample did), I'll
eat my own dogfood and just use the
mapguide-react-layout as the viewer for the new asp.net core sample and set it up to talk to the existing mapagent of your MapGuide installation. This approach requires enabling
CORS to make the mapagent accessible from a different origin. I figured out how this is actually done, which I'll show you in another blog post.
So with this main challenge addressed, I launched the work-in-progress asp.net core sample with the mapguide-react-layout viewer, and I get this problem.
For some context, this code sample does the following:
- Create a new session id
- Create a new web layout on-the-fly that sets up the task pane to point to our custom landing page of code samples
- Save this web layout into a session repository and then render the MVC view instructing the embedded mapguide-react-layout viewer to load from this weblayout and session id
It turns out that mapguide-react-layout misinterpreted this initial state and tries to load the viewer as though the user manually refreshed the browser (the
URL state recovery feature introduced in 0.11) and assumes that a runtime map already exists
This was clearly a bug and since I needed this viewer to behave properly in the context of a new code sample for a re-activated SDK story for the next milestone release of MapGuide Maestro, this has been the longest block of text to segue into ...
... Announcing a new bugfix release of mapguide-react-layout :)