2010-08-11 6 views
1

J'essaie d'ajouter un document à l'index en utilisant C# (xml) mais je reçois toujours l'erreur 400 (mauvaise demande). Des idées de ce que je fais mal?Ajouter des documents en utilisant C#

code:

private static string GetXml() 
    { 
     XDocument document = new XDocument(
      new XDeclaration("1.0", "UTF-8", "yes"), 
      new XElement("add", 
       new XElement("doc", 
        new XElement("field", 
         new XAttribute("name", "employeeId"), 
         new XText("05991")), 
        new XElement("field", 
         new XAttribute("name", "skills"), 
         new XText("Perl")) 
        ) 
       ) 
      ); 
     return document.ToString(SaveOptions.DisableFormatting); 
    } 

    private static void AddDocument() 
    { 
     string content = GetXml(); 
     HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://mysolrhost:8080/solr/update"); 
     request.Method = "POST"; 
     request.ContentType = "text/xml; charset=utf-8"; 
     byte[] byteArray = Encoding.UTF8.GetBytes(content); 
     request.ContentLength = byteArray.Length; 

     using (var requestStream = request.GetRequestStream()) 
     using (var sw = new StreamWriter(requestStream)) 
     { 
      sw.Write(content); 
     } 
     WebResponse response = request.GetResponse(); 
     Console.WriteLine(((HttpWebResponse) response).StatusDescription); 
    } 

    public static void Main(string[] args) 
    { 
     AddDocument(); 
    } 

Edit: le problème est résolu (voir la réponse ci-dessous).

Merci beaucoup!

+0

pourrait vouloir regarder le trafic HTTP (par exemple) Fiddler pour voir ce qui se passe sur le fil –

Répondre

0

Ah, idiot, j'ai oublié d'ajouter un champ dans le schéma et c'est la raison pour laquelle j'ai eu 400. Tout va bien maintenant.

Merci beaucoup!

1

C'est un tir dans le noir, mais dans des situations similaires, j'ai eu le serveur ne pas être en mesure de gérer la nomenclature au début du document (ce qui devrait, à mon humble avis, bien). Une façon simple d'essayer de voir si cela est le problème serait:

  • changement byte[] byteArray = new UTF8Encoding(false).GetBytes(content);
  • se débarrasser de la StreamWriter (vous n'avez pas besoin dans le code existant), juste requestStream.Write(byteArray, 0, byteArray.Length);
+0

Merci, je l'ai enlevé StreamWriter, mais il semble que le problème était moi :) Merci quand même. – rrejc

Questions connexes