示例#1
0
        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);
        }