I have written my own MapTileSource class that enables the xamMap to use a WMS. This works excellent and gives us access to all map sources we need.
However, now and then the WMS may fail on a single request for a tile and return an empty response. When this happens I receive the following exception:
System.AccessViolationException was unhandled Message=Attempted to read or write protected memory. This is often an indication that other memory is corrupt. InnerException:
The result of the exception is that my Silverlight application crashes and terminates.
Since no stack trace or other information is available I am at a loss how to proceed. From what I have managed to figure out it seems that the xamMap control fails when the response for a tile request is empty. My GetTileLayers method fills the tileImageLayerSources list with the appropriate urls, but have no means of validating the request before it is performed. The urls are well formed, but as said the WMS sometimes fails on a single request.
Do yoy have any suggestions on how to handle this problem? If I somehow could trap the exception, hence avoiding the application crash, everything would be fine.
Hi Mikael,
After the GetTileLayers method fills your list of urls, are you then making the WMS requests manually then waiting for the response? Are you able to view the response after making the request and checking it to make sure it's valid?
I see that the InnerException portion of the error is missing in your post. Does the InnerException have any additional information?
I have spent the day working on this problem, and have some new information. I have intercepted all requests and responses with the WMS server, as well as set up my own test site to return various reponses to test the behaviour of the xamMap.
I was wrong in that the WMS returns an empty response; it returns an error message as xml markup, like this one:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?><ServiceExceptionReport version="1.1.0"><ServiceException>[99][Interceptor]Overforbruk p� kort tid.Vent litt, pr�v igjen.(5)</ServiceException></ServiceExceptionReport>
This is not an error in the request, since trying it again in a few seconds return a valid tile. The error response from the WMS states that it is temporarily out of resources, and "please try again in a while".
However the end result stays the same; when this response arrives then the xamMap gets into trouble handling it. Since all this happens asynchrounously I have no place to attach an error handler (that I know of). Is it possible to attach an event handler of some sort to the xamMap in order to trap and handle this kind of errors?
The XamMap deals strictly with image urls and does not process WMS in any way so it makes sense that the XamMap wouldn't know what to do if the url ended up returning XML instead of an image. I want to try and get a sample built that reproduces this issue. Is it possible for you to provide one that I can take a look at. If not can you provide the code your using to create the XamMap as well as the code for your custom MapTileSource? Also is the WMS server your using a public server that I will be able to request data from?
Just an update to let everyone know, this issue has been resolved in the latest service release.
You can download the latest service release by going to the Infragistics website and hovering over the "Account" tab then selecting "My Keys & Downloads" from the dropdown. On the "My Keys & Downloads" page you will see a list of product keys. Select the product key assigned to the product you wish to update and then scroll down the download list until you reach the Service Releases section.
I have logged this issue in our internal tracking system with a development ID of 102657. I have also created a private case for you that is linked to it. This will notify you automatically when a fix is available. The case number is CAS-83901-598F3X.
I will also update this thread when a fix is made available.
Excellent. I'm looking forward to the response.
Thanks
I'm still waiting on a response from engineering. As soon as I get one, I will update you.
I have notified our engineering team of the issue and forwarded your sample to them. I will update you tomorrow once I have a response.