private void FinishWebRequest(IAsyncResult result)
{
try
{
var response = _webRequest.GetSyncResponse(_timeOut);
var dataStream = CopyAndClose(response.GetResponseStream());
DataContractJsonSerializer serializer = null;
if(_capabilitiesType == CapabilitiesType.DynamicServiceCapabilities)
serializer = new DataContractJsonSerializer(typeof(ArcGISDynamicCapabilities));
else if (_capabilitiesType == CapabilitiesType.ImageServiceCapabilities)
serializer = new DataContractJsonSerializer(typeof(ArcGISImageCapabilities));
if (dataStream != null)
{
_arcGisCapabilities = (IArcGISCapabilities)serializer.ReadObject(dataStream);
dataStream.Position = 0;
}
_arcGisCapabilities.ServiceUrl = _url;
//Hack because ArcGIS Server doesn't return a normal StatusCode
if (dataStream != null)
{
using (var reader = new StreamReader(dataStream))
{
var contentString = reader.ReadToEnd();
if (contentString.Contains("{\"error\":{\""))
{
OnCapabilitiesFailed(EventArgs.Empty);
return;
}
}
}
if (dataStream != null) dataStream.Dispose();
response.Dispose();
_webRequest.EndGetResponse(result);
OnFinished(EventArgs.Empty);
}
catch (Exception ex)
{
Logger.Log(LogLevel.Error, ex.Message, ex);
OnCapabilitiesFailed(EventArgs.Empty);
}
}