0

サーバー側でXMLファイルを動的に作成する必要があるasp.netプロジェクトに取り組んでいます。データはサーバーから取得され、リクエストへの応答としてクライアントに送信する必要があります。クライアント (silverlight) は応答を取得し、そのデータを使用して GUI コントロールにフィードします。今、私はこのエラーとデータのない空白のコントロールを取得しています:

906 Content-Length mismatch: Response Header indicated 192,822 bytes, but server sent 192,856 bytes.

これは基本的に、応答が実際にはヘッダーの内容よりも大きいことを示しています。Fiddler で応答をチェックして、XML ファイルが正しいことを確認したところ、XML の末尾にいくつかの html タグが見つかりました。もちろん、クライアント側では解析されず、コントロールは完全に空白です。

ここにコードがあります

 ...

                MemoryStream ms = new MemoryStream();
                //Use a writer to greate the XML
                using (XmlWriter writer = XmlWriter.Create(ms))
                {
                    writer.WriteStartDocument(); //Header
                    writer.WriteComment("Response");
                    {
                        writer.WriteStartElement("sfdata"); //<Root>
                        {      

                                  writer.WriteStartElement("dataPoint");
                                {                        
                                    writer.WriteStartElement("ids");                                        
                                    foreach (int i in baseIndexes)
                                    {
                                        writer.WriteStartElement("sfId");
                                        writer.WriteValue(i);
                                        writer.WriteEndElement();                                            
                                    }
                                    writer.WriteEndElement();
                                }
                                writer.WriteEndElement(); //<End dataPoint>
                            }
                           writer.WriteEndElement(); //closes <Root>

                       }
                    writer.WriteEndDocument();
                    writer.Close();

                //Convert Memory Stream to Byte Array
                    byte[] data = ms.ToArray();

                    string xmlFileName = "OrdExp_" + DateTime.Today.Year.ToString() +
                        DateTime.Today.Month.ToString("00") +
                        DateTime.Today.Day.ToString("00");

                    //Creating the Context
                    this.Context.Response.Clear();

                    //Heads up browser, here comes some XML
                    this.Context.Response.ContentType = "text/xml";
                    this.Context.Response.AddHeader("Content-Disposition:",
                        "attachment;filename=" + HttpUtility.UrlEncode(xmlFileName));

                    //Set the size of the file so the progress bar reports that correctly
                    HttpContext.Current.Response.AddHeader("Content-Length",
                        data.Length.ToString());

                    this.Context.Response.BinaryWrite(data);                            
                    this.Context.ApplicationInstance.CompleteRequest();
                    ms.Flush();
                    ms.Close();
                }

うまくいけば、私は括弧を見逃していませんでした。

ファイルを作成して Context.Response で返すコードはこれですべてです。私はそれを何度も経験しましたが、最後に余分な html タグを追加するものは何も見当たりませんが、私はこのようなことはあまり得意ではありません. だから私は何かが欠けているかもしれません。これらは、xml ファイルの最後にあるタグです。

</span>
</form>
</body>
</html>
4

0 に答える 0