【发布时间】: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 中的请求和响应,我有一种感觉,当您的响应为空时,您会看到出现的无效数据。