J'ai une méthode qui génère du XML pour une classe que j'ai créée -getXML(). On appelle cela des méthodes suivantes:Strange Silverlight Problème
private void send_Response()
{
String xmlUrl = ((App)Application.Current).Resources["xmlUrl"].ToString();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(xmlUrl, UriKind.Absolute));
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.BeginGetRequestStream(new AsyncCallback(RequestReady), request);
}
void RequestReady(IAsyncResult asyncResult)
{
HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
Stream stream = request.EndGetRequestStream(asyncResult);
StreamWriter writer = new StreamWriter(stream);
writer.WriteLine("assessmentXml=" + assessment.getXML(testComplete));
writer.Flush();
writer.Close();
request.BeginGetResponse(new AsyncCallback(ResponseReady), request);
}
void ResponseReady(IAsyncResult asyncResult)
{
HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
Stream s = response.GetResponseStream();
StreamReader sr = new StreamReader(s);
String line = "";
String Result = "";
line = sr.ReadLine();
while (line != null)
{
Result += line;
line = sr.ReadLine();
}
s.Close();
}
Le getXML lui-même se présente comme suit:
public String getXML(bool end)
{
StringWriter output = new StringWriterWithEncoding(Encoding.UTF8);
XmlWriterSettings ws = new XmlWriterSettings();
ws.Indent = true;
ws.Encoding = new UTF8Encoding(true);
ws.ConformanceLevel = ConformanceLevel.Document;
using (XmlWriter writer = XmlWriter.Create(output, ws))
{
writer.WriteStartElement("root");
if (end)
{
writer.WriteAttributeString("testComplete", "true");
}
else
{
writer.WriteAttributeString("testComplete", "false");
}
for (int i = 0; i < theSections.Count(); i++)
{
writer.WriteStartElement("section");
writer.WriteAttributeString("id", theSections.ElementAt(i).Id.ToString());
writer.WriteAttributeString("title", theSections.ElementAt(i).Name.ToString());
writer.WriteAttributeString("completed", theSections.ElementAt(i).Completed.ToString());
for (int j = 0; j < theSections.ElementAt(i).Elements.Count(); j++)
{
writer.WriteStartElement(theSections.ElementAt(i).Elements.ElementAt(j).Name.ToString());
for (int a = 0; a < theSections.ElementAt(i).Elements.ElementAt(j).Attributes().Count(); a++)
{
writer.WriteAttributeString(theSections.ElementAt(i).Elements.ElementAt(j).Attributes().ElementAt(a).Name.ToString(), theSections.ElementAt(i).Elements.ElementAt(j).Attributes().ElementAt(a).Value);
}
for (int c = 0; c < theSections.ElementAt(i).Elements.ElementAt(j).Elements().Count(); c++)
{
writer.WriteStartElement(theSections.ElementAt(i).Elements.ElementAt(j).Elements().ElementAt(c).Name.ToString());
writer.WriteString(theSections.ElementAt(i).Elements.ElementAt(j).Elements().ElementAt(c).Value);
writer.WriteEndElement();
}
writer.WriteEndElement();
}
writer.WriteEndElement();
}
writer.WriteEndDocument();
writer.Flush();
writer.Close();
}
return output.ToString();
}
(Désolé les quantités excessives de code).
Tout cela fonctionne très bien, et je peux voir la sortie xml. Mais maintenant je veux ajouter plus de code à la fonction getXML(), et Silverlight ne me laissera pas le faire. Même un simple MessageBox.Show ("quelque chose") ne s'affichera pas, et toute la méthode ne génère plus de XML. Cela dit, il n'y a pas d'erreurs ou d'avertissements générés dans Visual Studio.
J'ai ajouté un nouveau code dans d'autres zones du même fichier .cs et tout fonctionne très bien, c'est juste dans cette méthode unique. J'ai essayé de reconstruire mais aussi en vain, donc je suis confus quant à la façon dont cela pourrait être le cas. Est-ce un bug de Visual Studio?
Merci d'avance pour toute aide.
Avez-vous parcouru votre code à travers le débogueur? –
Je viens de trouver une erreur Inverser Croix Thread mais je ne peux pas sembler le retrouver ... – JBarnes
Je l'ai fonctionné. Aucune idée pourquoi. Je pense que Cross Thread Error devait faire avec MessageBox faisant partie de l'interface utilisateur, donc j'ai enlevé cela et juste ajouté quelque chose de nouveau xmlwriter ... et cela a fonctionné. J'avais déjà essayé ça et ça n'a pas fonctionné, donc je vais garder un œil dessus mais jusqu'ici tout va bien. Encore perplexe, mais indifférent. – JBarnes