首先我调用了WebServices,返回的结果XML字符串。然后我再使用DataGrid嵌套来实现XML数据的显示。但是奇怪的是一旦用户访问到这个页面,网络就堵塞了(ping 服务器有300ms,随着访问用户的增加,延时也会增加,有时还会延时。),但是如果没有用户访问这个页面,网络就正常了(延时只有7ms)。请高手帮忙想想这是什么问题造成的?
    后来我怀疑是调用WebServices造成的,所以就直接访问一个XML文件,可问题依然存在。
    
    下面是我写的代码,请高手帮忙看看,有什么问题?

解决方案 »

  1.   

    FlightResult.aspx:<%@ Page language="c#" Codebehind="FlightResult.aspx.cs" AutoEventWireup="false" Inherits="TPSP.Flight.FlightResult" EnableViewState="false" EnableViewStateMac="false" %>
    <%@ Register TagPrefix="uc1" TagName="TinyQryFlight" Src="TinyQryFlight.ascx" %>
    <%@ OutputCache Duration="120" VaryByParam="*"%> 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>航班查询结果</title>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    <LINK href="../style.css" type="text/css" rel="stylesheet">
    <SCRIPT language="JavaScript" src="../JS/MyJs.js"></SCRIPT>
    </HEAD>
    <body topMargin="0">
    <form id="formSingle" method="post" runat="server">
    <uc1:TinyQryFlight id="TinyQryFlight1" runat="server"></uc1:TinyQryFlight>
    <table cellSpacing="0" cellPadding="0" width="680" align="center" border="0">
    <tr>
    <td><IMG height="29" src="../Images/FlightResult.gif" width="200"></td>
    </tr>
    <tr bgColor="#cde5e7">
    <td height="24"><strong>航线:&nbsp;
    <asp:label id="lblFromCity" runat="server"></asp:label>到<asp:label id="lblToCity" runat="server"></asp:label>; 
    航班日期:<asp:label id="lblDepDate" runat="server"></asp:label>(去程查询结果)</strong>
    </td>
    </tr>
    <tr>
    <td height="24"><strong>起飞机场:<asp:label id="lblFromAirPort" runat="server"></asp:label></strong></td>
    </tr>
    <tr>
    <td height="24"><strong>到达机场:<asp:label id="lblToAirPort" runat="server"></asp:label></strong></td>
    </tr>
    <tr>
    <td height="24"><strong>燃油附加费:<asp:label id="lblYQ" runat="server"></asp:label>
    元(注意:2006年4月20号起燃油附加费新规定:800公里(含800公里)以上成人收60元儿童收30元,800公里以下成人收30元儿童20元,婴儿免收燃油附加费)</strong></td>
    </tr>
    </table>
    <asp:datagrid id="dgParent" runat="server" HorizontalAlign="Center" Width="680px" AutoGenerateColumns="False"
    BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="4">
    <FooterStyle ForeColor="#003399" BackColor="#99CCCC"></FooterStyle>
    <SelectedItemStyle Font-Bold="True" ForeColor="#CCFF99" BackColor="#009999"></SelectedItemStyle>
    <ItemStyle ForeColor="#003399" BackColor="White"></ItemStyle>
    <HeaderStyle Font-Bold="True" ForeColor="#CCCCFF" BackColor="#003399"></HeaderStyle>
    <Columns>
    <asp:TemplateColumn HeaderText="航班(机型)">
    <HeaderStyle HorizontalAlign="Center" Width="20%"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "Flight") %>
    (机型:<%# DataBinder.Eval(Container.DataItem, "Model") %>)
    <br>
    <%# DataBinder.Eval(Container.DataItem, "AirCompany") %>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="起飞时间/到达时间">
    <HeaderStyle HorizontalAlign="Center" Width="17%"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    起飞时间:<%# DataBinder.Eval(Container.DataItem, "FlyTime") %>
    <br>
    到达时间:<%# DataBinder.Eval(Container.DataItem, "ArrivalTime") %>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="机场建设费">
    <HeaderStyle HorizontalAlign="Center" Width="11%"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "Tax") %>

    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="舱位明细">
    <HeaderStyle HorizontalAlign="Center" Width="52%"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <asp:DataGrid ID="dgChild" runat="server" AutoGenerateColumns="False" Width="100%">
    <Columns>
    <asp:TemplateColumn HeaderText="舱位">
    <HeaderStyle HorizontalAlign="Center" Width="15%"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "ClassCode") %>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="折扣">
    <HeaderStyle HorizontalAlign="Center" Width="15%"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "Code") %>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="剩余张数">
    <HeaderStyle HorizontalAlign="Center" Width="15%"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "Num") %>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="票价">
    <HeaderStyle HorizontalAlign="Center" Width="15%"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "Price") %>

    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="操作">
    <HeaderStyle HorizontalAlign="Center" Width="60%"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <input type=radio value='<%# DataBinder.Eval(Container.DataItem, "ClassInfo") %>' name=DepSeat><font color="red">选择该座位</font>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    <PagerStyle HorizontalAlign="Left" ForeColor="#003399" BackColor="#99CCCC" Mode="NumericPages"></PagerStyle>
    </asp:datagrid>
    <table cellSpacing="0" cellPadding="0" width="680" align="center" border="0">
    <tr>
    <td align="right"><INPUT id="SingleSubmit" type="submit" value="我要订票" name="SingleSubmit" runat="server"
    onclick="return ChkSingleRadio()"></td>
    </tr>
    </table>
    </form>
    </body>
    </HTML>
      

  2.   

    FlightResult.aspx.cs:using System;
    using System.Data;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Xml;
    using TPSP.Common;
    using TPSP.IBE;namespace TPSP.Flight
    {
    /// <summary>
    /// WebForm1 的摘要说明。
    /// </summary>
    public class FlightResult : BasePage
    {
    protected Label lblFromCity;
    protected Label lblToCity;
    protected Label lblDepDate;
    protected Label lblFromAirPort;
    protected Label lblToAirPort;
    protected Label lblYQ;
    protected HtmlInputButton SingleSubmit;
    protected DataGrid dgParent;
    protected XmlDocument doc;
    private void Page_Load(object sender, EventArgs e)
    {
    doc = new XmlDocument();
    if (!Page.IsPostBack)
    {
    if (Session["CmdDep"] != null)
    {
    try
    {
    string SingleLine = new IEtermservice().Qry(Funs.FormatAvCmd("CKG230", Session["CmdDep"].ToString()));
    //doc.Load(Server.MapPath("XXX.xml"));
    doc.LoadXml(SingleLine);
    DataSet ds=new DataSet();
    XmlNodeList nsHead = doc.SelectNodes("//Head");
    lblFromCity.Text = nsHead[0].ChildNodes[0].InnerText;
    lblToCity.Text = nsHead[0].ChildNodes[2].InnerText;
    lblDepDate.Text = EtermToDate(Session["CmdDep"].ToString().Substring(Session["CmdDep"].ToString().Length - 7, 7), "年", "月", "日") + nsHead[0].ChildNodes[4].InnerText;
    lblFromAirPort.Text = nsHead[0].ChildNodes[1].InnerText;
    lblToAirPort.Text = nsHead[0].ChildNodes[3].InnerText;
    lblYQ.Text = nsHead[0].ChildNodes[5].InnerText;
    XmlNodeList ns = doc.SelectNodes("//Detail");
    DataTable table = new DataTable("ParentTable");
    DataColumn column;
    DataRow row; column = new DataColumn();
    column.DataType = Type.GetType("System.Int32");
    column.ColumnName = "id";
    column.ReadOnly = true;
    column.Unique = true;
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "Flight";
    column.AutoIncrement = false;
    column.Caption = "Flight";
    column.ReadOnly = true;
    column.Unique = false;
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "AirCompany";
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "Model";
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "FlyTime";
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "ArrivalTime";
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "Tax";
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "YPrice";
    table.Columns.Add(column); DataColumn[] PrimaryKeyColumns = new DataColumn[1];
    PrimaryKeyColumns[0] = table.Columns["id"];
    table.PrimaryKey = PrimaryKeyColumns; for (int i = 0; i < ns.Count; i++)
    {
    row = table.NewRow();
    row["id"] = i;
    row["Flight"] = ns[i].ChildNodes[1].InnerText;
    row["AirCompany"] = ns[i].ChildNodes[0].InnerText;
    row["Model"] = ns[i].ChildNodes[2].InnerText;
    row["FlyTime"] = ns[i].ChildNodes[3].InnerText;
    row["ArrivalTime"] = ns[i].ChildNodes[4].InnerText;
    row["Tax"] = ns[i].ChildNodes[6].InnerText;
    row["YPrice"] = ns[i].ChildNodes[7].InnerText;
    table.Rows.Add(row);
    } dgParent.DataSource = table;
    dgParent.DataBind();
    }
    catch
    {
    Dialog.ShowAlertMsg("航班查询失败,请重新查询!");
    Dialog.PageRedirect("AirTicket.aspx", 2);
    }
    }
    }
    } private void dgParent_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
    DataRowView drv = (DataRowView) e.Item.DataItem; string strFlight = drv.Row["Flight"].ToString();
    string strFlyTime = drv.Row["FlyTime"].ToString();
    string strArrivalTime = drv.Row["ArrivalTime"].ToString();
    string strTax = drv.Row["Tax"].ToString();
    string strYPrice = drv.Row["YPrice"].ToString();
    string strCmdDep = Session["CmdDep"].ToString(); XmlNodeList ns = doc.SelectNodes("//Detail[Flight='" + strFlight + "']/Class");
    DataTable table = new DataTable("ChildTable");
    DataColumn column;
    DataRow row;
    column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "ClassCode";
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "Code";
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "Num";
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "Price";
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "ClassInfo";
    table.Columns.Add(column);
    for (int i = 0; i < ns.Count; i++)
    {
    row = table.NewRow(); row["ClassCode"] = ns[i].ChildNodes[0].InnerText;
    row["Code"] = ns[i].ChildNodes[1].InnerText;
    row["Num"] = ns[i].ChildNodes[2].InnerText;
    string strNum = ns[i].ChildNodes[2].InnerText;
    if (strNum == ">9张")
    strNum = "10";
    else
    strNum = strNum.Substring(0, 1);
    row["Price"] = ns[i].ChildNodes[3].InnerText;
    //CA4137,F,29JUL05,CKGPEK,0840,1045,2340,重庆,北京,2005年7月29日星期五,E,9,头等舱,50,1560,40
    row["ClassInfo"] = strFlight + "," +
    ns[i].ChildNodes[0].InnerText + "," + //舱位代码
    strCmdDep.Substring(strCmdDep.Length - 7, 7) + "," + //格式化后的起飞时间
    strCmdDep.Substring(0, 6) + "," + //英文城市对
    strFlyTime + "," + //起飞时间
    strArrivalTime + "," + //到达时间
    ns[i].ChildNodes[3].InnerText + "," + //票价
    lblFromCity.Text + "," + //起飞城市
    lblToCity.Text + "," + //到达城市
    lblDepDate.Text + "," + //起飞日期中文
    "E" + "," + //电子客票标识
    strNum + "," + //所剩张数
    ns[i].ChildNodes[1].InnerText + "," + //折扣率
    strTax + "," + //机场建设费
    strYPrice + "," + //Y舱价格
    lblYQ.Text; //燃油附加费
    table.Rows.Add(row);
    } DataGrid dg = (DataGrid) e.Item.FindControl("dgChild");
    dg.DataSource = table;
    dg.DataBind();
    }
    }
      

  3.   

    protected string EtermToDate(string EtermDate, string LinkSign1, string LinkSign2, string LinkSign3)
    {
    string Temp = EtermDate;
    string Result = "";
    Result = Temp.Substring(5, 2) + LinkSign1;
    switch (Temp.Substring(2, 3))
    {
    case "JAN":
    {
    Result += "1";
    break;
    }
    case "FEB":
    {
    Result += "2";
    break;
    }
    case "MAR":
    {
    Result += "3";
    break;
    }
    case "APR":
    {
    Result += "4";
    break;
    }
    case "MAY":
    {
    Result += "5";
    break;
    }
    case "JUN":
    {
    Result += "6";
    break;
    }
    case "JUL":
    {
    Result += "7";
    break;
    }
    case "AUG":
    {
    Result += "8";
    break;
    }
    case "SEP":
    {
    Result += "9";
    break;
    }
    case "OCT":
    {
    Result += "10";
    break;
    }
    case "NOV":
    {
    Result += "11";
    break;
    }
    case "DEC":
    {
    Result += "12";
    break;
    }
    }
    Result += LinkSign2 + Temp.Substring(0, 2) + LinkSign3;
    return Result;
    } #region Web 窗体设计器生成的代码 protected override void OnInit(EventArgs e)
    {
    InitializeComponent();
    base.OnInit(e);
    } private void InitializeComponent()
    {
    this.dgParent.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgParent_ItemDataBound);
    this.SingleSubmit.ServerClick += new System.EventHandler(this.SingleSubmit_ServerClick);
    this.Load += new System.EventHandler(this.Page_Load); } #endregion private void SingleSubmit_ServerClick(object sender, EventArgs e)
    {
    //去程座位信息
    Session["DepSeat"] = Request["DepSeat"].ToString();
    Response.Redirect("PassengerInfo.aspx");
    } }
    }
      

  4.   

    string SingleLine = new IEtermservice().Qry(Funs.FormatAvCmd("CKG230", Session["CmdDep"].ToString()));//这里调用了WebServices,SingleLine为返回的XML字符串
      

  5.   

    Session["CmdDep"]的值格式为“CKGPEK/27JUL05”,"CKGPEK"为出发城市+到达城市,"27JUL05"为起飞日期
      

  6.   

    简单后:
    FlightResult.aspx:
    <asp:datagrid id="dgParent" runat="server">
    <Columns>
    <asp:TemplateColumn HeaderText="航班(机型)">
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "Flight") %>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="舱位明细">
    <ItemTemplate>
    <asp:DataGrid ID="dgChild" runat="server" AutoGenerateColumns="False" Width="100%">
    <Columns>
    <asp:TemplateColumn HeaderText="舱位">
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "ClassCode") %>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:datagrid>FlightResult.aspx.cs:
    private void Page_Load(object sender, EventArgs e)
    {
    doc = new XmlDocument();
    if (!Page.IsPostBack)
    {
    if (Session["CmdDep"] != null)
    {
    try
    {
    string SingleLine = new IEtermservice().Qry(Funs.FormatAvCmd("CKG230", Session["CmdDep"].ToString()));
    //doc.Load(Server.MapPath("XXX.xml"));
    doc.LoadXml(SingleLine);

    XmlNodeList ns = doc.SelectNodes("//Detail");
    DataTable table = new DataTable("ParentTable");
    DataColumn column;
    DataRow row; column = new DataColumn();
    column.DataType = Type.GetType("System.Int32");
    column.ColumnName = "id";
    column.ReadOnly = true;
    column.Unique = true;
    table.Columns.Add(column); column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "Flight";
    column.AutoIncrement = false;
    column.Caption = "Flight";
    column.ReadOnly = true;
    column.Unique = false;
    table.Columns.Add(column); DataColumn[] PrimaryKeyColumns = new DataColumn[1];
    PrimaryKeyColumns[0] = table.Columns["id"];
    table.PrimaryKey = PrimaryKeyColumns; for (int i = 0; i < ns.Count; i++)
    {
    row = table.NewRow();
    row["id"] = i;
    row["Flight"] = ns[i].ChildNodes[1].InnerText;
            } dgParent.DataSource = table;
    dgParent.DataBind();
    }
    catch
    {
    Dialog.ShowAlertMsg("航班查询失败,请重新查询!");
    Dialog.PageRedirect("AirTicket.aspx", 2);
    }
    }
    }
    } private void dgParent_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
    DataRowView drv = (DataRowView) e.Item.DataItem; string strFlight = drv.Row["Flight"].ToString();

    XmlNodeList ns = doc.SelectNodes("//Detail[Flight='" + strFlight + "']/Class");
    DataTable table = new DataTable("ChildTable");
    DataColumn column;
    DataRow row;
    column = new DataColumn();
    column.DataType = Type.GetType("System.String");
    column.ColumnName = "ClassCode";
    table.Columns.Add(column); for (int i = 0; i < ns.Count; i++)
    {
    row = table.NewRow(); row["ClassCode"] = ns[i].ChildNodes[0].InnerText;
    } DataGrid dg = (DataGrid) e.Item.FindControl("dgChild");
    dg.DataSource = table;
    dg.DataBind();
    }
    }
      

  7.   

    to 然后我再使用DataGrid嵌套来实现XML数据的显示数据量大概有多少
      

  8.   

    如果你用xml来传送数据,可否考虑用dataset来做返回值呢
      

  9.   

    to 如果把XML保存下来有10K左右show your code about this web method.
      

  10.   

    数据量是比较大,由于WebServices是别人写的,所以我没办法每次只传10-20个
      

  11.   

    你调用的是不是航空公司的ABE接口,他们返回的纪录集类型是,DataTable类型,而且在查询时数据量是相当大的,建议不要用DataGrid绑定数据。
      

  12.   

    服务器:CPU:至强3.0G 内存:1G,线路:电信ADSL 2M
    你们觉得增加服务器带宽能解决问题吗?
      

  13.   

    直接用数据岛将XML显示出来试试
    若还是那问题
    那就是在数据较多时,用GRID显示时效率差
      

  14.   

    我现在直接访问一个htm文件(大小600K),此时ping服务器都有400多ms,显示完后又正常了(ping 服务器只有7ms),郁闷啊