接上篇文章,我們先簡單說明下綁定函數.首先執行個體化ServiceA,這個和一般類的執行個體化並沒有不同..接下來用xmlNode1來接受函數的傳回值,接下來是構造xml,並將其轉化為dataset,這是通用的方法,如果是剛接觸不久的朋友,最好能記下這種方法.
接下來給出非同步呼叫兩個服務的代碼
//綁定資料
public void BindData()
{
IAsyncResult ar1;
IAsyncResult ar2;
serviceA=new SiteA.Service1();
serviceB=new SiteB.Service1();
DataSet ds=new DataSet();
XmlNode xmlNode1,xmlNode2;
XmlDataDocument xd=new XmlDataDocument();
StringBuilder xmlString1,xmlString2;
//--簡單的非同步呼叫
ar1=serviceA.BeginGetSiteAData(strSearch,null,null);
ar2=serviceB.BeginGetSiteAData(strSearch,null,null);
xmlNode1=serviceA.EndGetSiteAData(ar1);
xmlNode2=serviceB.EndGetSiteAData(ar2);
//----------
if(xmlNode1==null&&xmlNode2==null) //--預存程序執行失敗
return;
xmlString1=new StringBuilder(xmlNode1.OuterXml);
xmlString2=new StringBuilder(xmlNode2.OuterXml);
xmlString1=MakeNewXmlString(xmlString1,xmlString2); //產生新的xml
if(xmlString1.ToString().Equals("<NewDataSet xmlns=\"\"></NewDataSet>"))
return ;
xd.LoadXml(xmlString1.ToString());
ds.ReadXml(new XmlNodeReader(xd));
DataGrid1.DataSource=ds.Tables["list"].DefaultView;
DataGrid1.DataBind();
}
//產生新XML
public StringBuilder MakeNewXmlString(StringBuilder str1,StringBuilder str2)
{
str1=str1.Replace("</NewDataSet>","");
str2=str2.Replace("<NewDataSet xmlns=\"\">","");
str1.Append(str2.ToString());
return str1;
}
這有兩個需要注意的地方,一個是xml構造,還有就是非同步呼叫的實現,請讀者,自己理解
下面講下通過dll來引用webservice的方法,我只把流程介紹下.
首先,在ie輸入服務的地址,如:http://www.xxx.com/service.asmx
然後寫輸入http://www.xxx.com/service.asmx?wsdl
開啟後,另存新檔xxx.wsdl
然後用vs的命令提示字元來編譯:wsdl /namespace:SiteA ServiceA.wsdl
產生名字空間為sitea的代理類
最後csc /out:ServiceA.dll /t:library Service1.cs ,其中service1.cs為代理類檔案
最後引用dll就可以了.
到這裡,我們的例子基本也就介紹完了,由於個人的原因,最後一篇可能寫的比較倉促,非常慚愧.
如果你有什麼需要協助的或是疑惑的地方,可以wiseman.net@gmail.com聯絡我,如果上網的話,一定會回的.
From:IT實驗室