public Stream GetWtmlFile(string id, string name) { MemoryStream stream = null; try { OutgoingWebResponseContext context = WebOperationContext.Current.OutgoingResponse; context.Headers.Add(System.Net.HttpResponseHeader.CacheControl, "public"); context.ContentType = "application/xml"; context.Headers.Add("content-disposition", "attachment;filename=" + name + ".wtml"); context.StatusCode = System.Net.HttpStatusCode.OK; XmlDocument xmlDoc = (XmlDocument)pyramidRepositoryInstance.GetWtmlFile(id, name); if (xmlDoc != null) { var operationContext = System.ServiceModel.OperationContext.Current; string appPath = operationContext.Channel.LocalAddress.ToString(); // Update Image set node attribute and child node values to consider sharing service path. XmlNode imageSet = xmlDoc.SelectSingleNode(Constants.ImageSetPath); if (imageSet != null) { // Update URL attribute. if (imageSet.Attributes[Constants.UrlAttribute] != null && !imageSet.Attributes[Constants.UrlAttribute].Value.IsValidUrl()) { imageSet.Attributes[Constants.UrlAttribute].Value = appPath + string.Format(CultureInfo.InvariantCulture, Constants.WTMLServiceUrl, id) + Constants.WtmlFilepath; } // Update DEM URL attribute. if (imageSet.Attributes[Constants.DEMUrl] != null && (!imageSet.Attributes[Constants.DEMUrl].Value.IsValidUrl() || imageSet.Attributes[Constants.DEMUrl].Value.StartsWith(Constants.DefaultDEMUrl, StringComparison.OrdinalIgnoreCase))) { imageSet.Attributes[Constants.DEMUrl].Value = appPath + string.Format(CultureInfo.InvariantCulture, Constants.DEMServiceUrl, id) + Constants.DemFilepath; } // Update Thumbnail URL. if (imageSet.ChildNodes != null && imageSet.ChildNodes.Count > 0) { foreach (XmlNode node in imageSet.ChildNodes) { if (node.Name.Equals(Constants.ThumbnailUrl, StringComparison.Ordinal) && imageSet.Attributes[Constants.WTMLName] != null && !node.InnerText.IsValidUrl()) { node.InnerText = appPath + string.Format(CultureInfo.InvariantCulture, Constants.ThumbnailServiceUrl, id, imageSet.Attributes[Constants.WTMLName].Value); break; } } } } // Update Place node attribute values to consider sharing service path. XmlNode place = xmlDoc.SelectSingleNode(Constants.PlacePath); if (place != null && place.Attributes[Constants.PlaceName] != null && !string.IsNullOrWhiteSpace(place.Attributes[Constants.PlaceName].Value) && place.Attributes[Constants.PlaceName].Value.Equals(imageSet.Attributes[Constants.PlaceName].Value, StringComparison.OrdinalIgnoreCase)) { if (place.Attributes[Constants.PlaceThumbnailAttribute] == null) { place.Attributes.Append(xmlDoc.CreateAttribute(Constants.PlaceThumbnailAttribute)); } // Update Thumbnail URL. if (place.Attributes[Constants.PlaceThumbnailAttribute] != null && !place.Attributes[Constants.PlaceThumbnailAttribute].Value.IsValidUrl()) { place.Attributes[Constants.PlaceThumbnailAttribute].Value = appPath + string.Format(CultureInfo.InvariantCulture, Constants.ThumbnailServiceUrl, id, place.Attributes[Constants.PlaceName].Value); } } stream = new MemoryStream(); xmlDoc.Save(stream); stream.Seek(0, SeekOrigin.Begin); } } catch (XPathException) { throw; } catch (FaultException) { throw; } return(stream); }