Как я могу сделать XML для myXMLHttpRequest.responseXML с XmlTextWriter в .ashx - PullRequest
0 голосов
/ 15 мая 2011

Я пробую это на своей странице .ashx, но я получил ошибку 500 в myXMLHttpRequest.status, и я не могу понять, в чем проблема. простой код для генерации простого XML был бы очень хорош. как:

<properties>
 <property>
   <address>812 Gwyn Ave</address>    
 </property>
 <property>
   <address>3308 James Ave S</address>    
 </property>
</properties>

@ вот мое решение (SQL-код работает нормально):

public void ProcessRequest(HttpContext context)
    {
        context.Response.Clear();            
        context.Response.ContentType = "text/xml";
        XmlTextWriter writer = new XmlTextWriter();
        string user_id = context.Request.Params["user_id"];          

        string connectionString = ("Data Source=.;Initial Catalog=user_city;Integrated Security=True");
        string queryString = "select * from city_buildings where user_id=" + user_id + ";";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {                
            SqlCommand command = new SqlCommand(queryString, connection);
            connection.Open();
            SqlDataReader reader = command.ExecuteReader();
            writer.WriteStartDocument();
            try
            {               
                writer.WriteStartElement("buildings");
                while (reader.Read())
                {                        
                    writer.WriteStartElement("building");

                      writer.WriteElementString("user_id",Convert.ToString( reader[0]));

                    writer.WriteEndElement();

                }
                writer.WriteEndElement();
                writer.WriteEndDocument();
                writer.Flush();
                writer.Close();
            }
            finally
            {                   
                reader.Close();
            }
        }
    }

1 Ответ

0 голосов
/ 15 мая 2011

У вас нет доступа к Visual Studio прямо сейчас, так что вы делаете это из головы. Если пять вы отправной точкой.

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "text/xml";

    using (XmlWriter writer = XmlWriter.Create(context.Response.OutputStream))
    {
        writer.WriteStartDocument();
        // do xmlwriter stuff here.
        writer.WriteEndDocument();
    }
}

Обновление:

Я действительно хотел поместить туда OutputStream. Я обновил пример, чтобы отразить это.

Кратко рассмотрел ваш код. Я вижу, вы не выводите результат xmlwriter в HttpResponse. (что делает мой пример, связывая его с Context.Response.OutputStream). Это должно быть причиной, почему он не будет работать. Хотя, почему происходит ошибка 500, я не вижу. Может быть, вам следует запустить Visual Studio, чтобы увидеть, если какие-либо ошибки, которые могут привести к этому.

Также я заметил, что вы используете reader[0]. Несмотря на то, что это технически может быть правильным, я предлагаю вам использовать более безопасный метод, подобный следующему:

int fieldIndex = reader.GetOrdinal("address");
reader.GetString(fieldIndex);

Это гарантирует, что вы всегда получите нужное поле из запроса. Даже если в будущем вы решите изменить схему базы данных, добавив еще несколько столбцов.

...