【问题标题】:ASMX webservice giving error - The data at the root level is invalidASMX webservice 给出错误 - 根级别的数据无效
【发布时间】:2015-11-05 21:35:12
【问题描述】:

我是web services的新手,不太了解ws的流程。 这是我的 searchOrderWebService.cs 。

   [WebMethod]
    public int searchOrderID(string orderID)
    {   
    CheckProductTrack checkProductTrack = new CheckProductTrack();
    int Tid = checkProductTrack.getTrackRecord(orderID, 3);

    return Tid;
}



[WebMethod]
public List<ProgressDetails> getOrderIDProgress(int orderID)
{
    return ProgressTrackClass.ProgressTrack.getProgress(orderID).ToList();
}



[WebMethod]
public DataSet getTxDetails(int orderID)
{

    SqlDataAdapter da = new SqlDataAdapter();
    DataSet ds = new DataSet();
    da.SelectCommand = new SqlCommand("SELECT  tradeit.TSTxDetails.TxID, tradeit.TSTxDetails.ProductID, tradeit.TSTxDetails.ProductName, tradeit.TSTxDetails.Qty, tradeit.TSTxMaster.TxStatus "
                                     + " FROM tradeit.TSTxDetails INNER JOIN tradeit.TSTxMaster ON tradeit.TSTxMaster.TxID=tradeit.TSTxDetails.TxID WHERE tradeit.TSTxDetails.TxID='" + orderID + "' ", con);

    con.Open();
    da.Fill(ds);

    return ds;
}

流程是:

当用户输入OrderId,并点击按钮时,它将引导用户到webservice,并在trackItem表中搜索orderID。

如果 trackITem 表中存在 orderID,则会显示进度。

如果 trackITem 表中不存在 orderID,它将转到 TxDetails 表,如果存在,它将显示进度。

到目前为止,我的 web 服务只有在 orderID 位于 TrackItem 表中时才能工作,

如果在其他表中,会报此错误

  Exception Details: System.Xml.XmlException: The data at the root level is 

  invalid. Line 1, position 1.




 Line 638:      [System.ComponentModel.EditorBrowsableAttribute
(System.ComponentModel.EditorBrow   sableState.Advanced)]
 Line 639:searchOrderServiceReference.searchOrderIDResponsesearchOrderServiceReference.
 searchOrderWebServiceSoap.
 searchOrderID
 (searchOrderServiceReference.searchOrderIDRequest request) {
 Line 640:            return base.Channel.searchOrderID(request);
  Line 641:        }

这是我的 FormCLient ,我从中访问网络服务。

 public partial class FormClient : System.Web.UI.Page
 {
  SqlConnection con
  = new SqlConnection
  (ConfigurationManager.ConnectionStrings["TMXEntities"]
  .ConnectionString);

protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
    //RETRIVEING TXID ENTERED BY USER
    string TxID = TextBox1.Text;
    Label1.Text = "Tracking Details For Order No :" + TxID + " ";



    //webservice
    searchOrderServiceReference.searchOrderWebServiceSoapClient client = new searchOrderServiceReference.searchOrderWebServiceSoapClient();
    int trackingID = client.searchOrderID(TxID);



    //IF TX ID IS IN ANY ONE OF THE TABLE, THEN PROCEDD TO GET THE PROGRESS TRACK
    if (trackingID != 0)
    {
        GridView3.DataSource = null;
        GridView3.DataBind();

        Label2.Text = "";

        GridView1.DataSource = client.getOrderIDProgress(trackingID);
        GridView1.DataBind();
    }
    else
    {
        GridView1.DataSource = null;
        GridView1.DataBind();

        GridView3.DataSource = client.getTxDetailsStatusItem(trackingID);
        GridView3.DataBind();
     }
    }
   }

我对 serialize 、 xml 、 POST GET 字词真的很模糊。 asp.net 中正确的 web 服务应该是什么样子。

谢谢

【问题讨论】:

  • 就是这样,orderID会通过searchOrderID()--这个函数会在trackITem表中搜索这个ID。如果它不在 trackItem 中,它将继续到表 txDetails n 表 TradeRequest。我的问题是,如果用户输入已经在 trackITem 中的 orderID,这个 web 服务会很好地工作 n 显示很好,但是如果 order ID 不在 trackItem 中,n 需要继续到其他表,它只是不返回 ID 到下一个函数,getOrderIDProgress()..
  • 是的..这就是问题的开始
  • 会出现同样的错误,orderID 0 不在数据库中,所以返回错误
  • 类似FORMcLIENT(用户输入orderID)--> asmx(搜索orderID)-->返回FORMcLIENT(获取进度)--> asmx(执行getProgress过程)-->返回到FORMcLIENT(在gridview中显示结果)。所以在我序列化或做 smthing 之间,因为 ws 会以 xml 的形式返回结果,对吗?
  • 您将它们恢复为您期望的类型。我相信它缺乏反应是导致你头痛的原因。如果您查看 Fiddler 中的请求和响应,我有一种感觉,当您的响应为空时,您会看到出现的无效数据。

标签: c# asp.net asmx


【解决方案1】:

嗯,嗨,我们可以知道这个client.getTxDetailsStatusItem(trackingID); 的代码是什么吗?看来您显示的 asmx 仅包含 public DataSet getTxDetails(int orderID)

【讨论】:

  • ooppss 抱歉其实是同一个错误
  • DataSet getTxDetails(int orderID),我在这里打错了,我系统中的编码很好:D 所以不知道问题是什么
  • 因为流程就像从 formclient 到 ws n 再到 form n 再到 ws,我应该使用序列化程序还是 smthing 因为可能结果在 xml 中,而下面的函数无法得到它。这个 asmx 实际上是如何工作的,有很多术语我没有与 >. 一起使用
  • 嗯,有没有试过不返回DataSet,而是返回DataTable?
  • 不,我认为这只是我的故障排除方式,它仍然应该返回数据集,但是如果 dataset.Tables[0] 有内容,您是否尝试过调试?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 2014-01-17
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多