2010-12-06 35 views
1

Tous,Confines de fichiers en double SolrNet

J'ai écrit une méthode qui étend certaines fonctionnalités de l'application MVC de SolrNet. C'est très simple et dans mon contrôleur j'ai ajouté ce qui suit.

chaîne (index public) {{ essayer var = solr ServiceLocator.Current.GetInstance>(); Chaîne qs = Request.QueryString ["q"]; var results = solr.Query (nouveau SolrQueryByField ("asciiname", qs));

  StringBuilder buffer = new StringBuilder(); 

      buffer.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); 
      buffer.Append("<kml xmlns=\"http://www.opengis.net/kml/2.2\"\n"); 
      buffer.Append(" xmlns:gx=\"http://www.google.com/kml/ext/2.2\">\n"); 
      buffer.Append("<Document>\n"); 
      buffer.Append("<name>\n"); 
      buffer.Append("Gazetteer\n"); 
      buffer.Append("</name>\n"); 
      buffer.Append("<description>\n"); 
      buffer.Append("World Places\n"); 
      buffer.Append("</description>\n"); 

      foreach (var i in results) 
      { 
       String lat = i.latitude.ToString(); 
       String lon = i.longitude.ToString(); 
       String name = i.asciiName.ToString(); 
       String coords = lon.ToString() + "," + lat.ToString(); 

       name = name.Replace("&", "&amp;"); 
       name = name.Replace("<", "&lt;"); 
       name = name.Replace(">", "&gt;"); 

       buffer.Append("<Placemark>\n"); 
       buffer.Append("<name>\n"); 
       buffer.Append(name); 
       buffer.Append("</name>\n"); 
       buffer.Append("<Point>\n"); 
       buffer.Append("<coordinates>\n"); 
       buffer.Append(coords); 
       buffer.Append("</coordinates>\n"); 
       buffer.Append("</Point>\n"); 
       buffer.Append("</Placemark>\n"); 
      } 
      buffer.Append("</Document>\n"); 
      buffer.Append("</kml>"); 
      Response.Write(buffer.ToString()); 

      Response.AddHeader("content-disposition", "attachment; filename=geonames.kml"); 
      Response.ContentType = "application/vnd.google-earth.kml+xml"; 
      Response.AppendHeader("Content-Encoding", "kml"); 

      return buffer.ToString(); 
     } 
     catch (Exception) 
     { 
      return "ERROR"; 
     } 
    } 

Le fichier KML est généré mais le contenu est dupliqué à partir de l'étiquette. Est-ce que cela se produit dans var solr = ServiceLocator.Current.GetInstance>(); pour certaines raisons? J'ai traversé le débogueur toute la journée et n'arrive pas à comprendre pourquoi il écrit deux fois le tout. Il utilise la boucle foreach et itère correctement, mais encore une fois, il duplique le contenu du fichier entier.

Toute aide sur ce serait génial! Adam

Répondre

1

Ughhh ... J'ai complètement oublié le fait que j'écrivais deux fois le tampon!

Response.Write(buffer.ToString()); 

et

return buffer.ToString(); 

Adam