淺析WebService用戶端應用方法

來源:互聯網
上載者:User
web|用戶端 .NET平台內建了對Web service的支援,包括Web service的構建和使用。 與其它開發平台不同,使用.NET平台,你不需要其他的工具或者SDK就可以完成Web service的開發了。.NET Framework本身就全面支援Web service,包括伺服器端的要求處理常式和對用戶端發送和接受SOAP訊息的支援。本文將帶你用.NET建立和使用Web service。

  一 在.NET中建立Web service

  要在.NET中建立Web service,你只需在你的解決方案中選擇"檔案/添加新項",彈出如下圖1所示的對話方塊:



  圖1

  在此框中,選擇"Web服務",並指定名稱。Vs.Net將為你建立一個預設的webservice架構。根據需要,你可以建立所需的webservice方法。

  如下代碼是從sql server 2000的northwind資料庫employees中返回所有employee資訊的webservice方法。

[WebMethod]
public string getEmployees()
{
string cnstr="server=njim01;database=northwind;uid=sa;pwd=64084888;";
string rsString;
SqlConnection cn=new SqlConnection(cnstr);
SqlDataAdapter cmd=new SqlDataAdapter("select * from employees",cn);
DataSet ds=new DataSet();
DataTable tbl;
cmd.Fill(ds,"employees");
tbl=ds.Tables["employees"];
rsString="<table border=\"0\" bgcolor=\"blue\" cellpadding=\"1\"
   cellspacing=\"1\"><tr bgcolor=\"white\">";
for(int i=0;i<=ds.Tables["employees"].Columns.Count-1;i++)
{
rsString+="<td>"+ds.Tables["employees"].Columns[i].ColumnName+"</td>";
}
rsString+="</tr>";
for(int i=0;i<tbl.Rows.Count;i++)
{
rsString+="<tr bgcolor=\"white\">";
for(int j=0;j<=ds.Tables["employees"].Columns.Count-1;j++)
{
rsString+="<td>"+tbl.Rows[i][j]+"</td>";
}
rsString+="</tr>";
}
rsString+="</table>";
return rsString;
}



  由此可見,在vs.net中建立一個WebService是方便的。

  二 WebService在用戶端的應用

  通過對vs.net長期應用和研究,我們總結出WebService在用戶端應用的方法主要有以下四種可能:

  1、 在同一個解決方案中調用WebService方法;

  2、 在不同的解決方案中調用WebService方法;

  3、 在Internet上調用WebService方法;

  4、 利用webservice.htc調用WebService方法。

  以下對上述四種方法分別進行介紹。

  1、在同一個解決方案中調用WebService方法

首先,我們需要建立一個名為myTest.sln的解決方案。該方案由一個名為testForm.aspx的web表單和一個testService.asmx的WebService組成。testForm.aspx的代碼如下:

SqlDataAdapter cmd=new SqlDataAdapter("select * from employees",cn);
DataSet ds=new DataSet();
DataTable tbl;
cmd.Fill(ds,"employees");
tbl=ds.Tables["employees"];
rsString="<table border=\"0\" bgcolor=\"blue\" cellpadding=\"1\"
   cellspacing=\"1\"><tr bgcolor=\"white\">";
for(int i=0;i<=ds.Tables["employees"].Columns.Count-1;i++)
{
rsString+="<td>"+ds.Tables["employees"].Columns[i].ColumnName+"</td>";
}
rsString+="</tr>";
for(int i=0;i<tbl.Rows.Count;i++)
{
rsString+="<tr bgcolor=\"white\">";
for(int j=0;j<=ds.Tables["employees"].Columns.Count-1;j++)
{
rsString+="<td>"+tbl.Rows[i][j]+"</td>";
}
rsString+="</tr>";
}
rsString+="</table>";
return rsString;
}



  從以上代碼可以看出,在testForm表單中,我們僅提供了一個testWebService按鈕,當我們單擊testWebService時,使用一個名為msg的<span>來顯示testWebService中方法的傳回值。

  在testWebService.asmx中,我們僅建立一個方法,該方法代碼如下:

[WebMethod]
public string getEmployees()
{
string cnstr="server=njim01;database=northwind;uid=sa;pwd=6408;";
string rsString;
SqlConnection cn=new SqlConnection(cnstr);
SqlDataAdapter cmd=new SqlDataAdapter("select * from employees",cn);
DataSet ds=new DataSet();
DataTable tbl;
cmd.Fill(ds,"employees");
tbl=ds.Tables["employees"];
rsString="<table border=\"0\" bgcolor=\"blue\" cellpadding=\"1\"
  cellspacing=\"1\"><tr bgcolor=\"white\">";
for(int i=0;i<=ds.Tables["employees"].Columns.Count-1;i++)
{
rsString+="<td>"+ds.Tables["employees"].Columns[i].ColumnName+"</td>";
}
rsString+="</tr>";
for(int i=0;i<tbl.Rows.Count;i++)
{
rsString+="<tr bgcolor=\"white\">";
for(int j=0;j<=ds.Tables["employees"].Columns.Count-1;j++)
{
rsString+="<td>"+tbl.Rows[i][j]+"</td>";
}
rsString+="</tr>";
}
rsString+="</table>";
return rsString;
}



private void Button4_Click(object sender, System.EventArgs e)
{
testWebService webservice=new testWebService();
msg.InnerHtml=webservice.getCustomers();
}



  事實上,在同一個解決方案中對本方案中的webservice方法的調用就是通過類的方式進行定義和調用的。

  2、在不同的解決方案中調用WebService方法 有可能我們的WebService不是在同一個解決方案建立的,比如我們在先前的方案中已經建立。現在我們要在新的解決方案中對它的方法進行調用。

  在此可分為兩種情況:

  1、雖然webservice不在要調用它的解決方案中,但在同一台物理主機上;

  2、webservice和解決方案不在同一台物理主機上,如我們要調用microsoft的webservice範例,它在:

    http://chs.gotdotnet.com/quickstart/aspplus/samples/

      services/DataService/VB/DataService.asmx

  位置。如何調用?

  1) 在同一台物理主機上也有兩種調用方法:

  ①直接引用 直接引用含有webservice解決方案的dll。例如我們在另外一個名

  為webservice.sln的解決方案中建立了一個名為math.asmx的webservice,在這個webservice中我們編寫了一個方法:

[WebMethod]
public float add(float x,float y)
{
return x+y;
}



  下面我們要在testForm.aspx表單中調用該方法:

  首先,我們在testForm.aspx表單中增加一個新按鈕,名稱為reference。

  其次,我們在myTest.sln解決方案的引用中將webservice.dll添加進來。

  第三,對reference按鈕的reference_click()編碼如下:

private void reference_Click(object sender, System.EventArgs e)
{
float x,y;
webservice.math math1=new webservice.math();
/*在此定義了webservice對象math1*/
x=11.88f;
y=23.19f;
msg.InnerHtml=math1.add(x,y).ToString();
/*在此調用了math1對象的add()方法,並將結果顯示在名為msg的<span>上*/
}



  當我們單擊reference按鈕時,add()方法調用的結果便顯示在名為msg的<span>標記中。

  ②web引用 事實上,vs.net提供了無比強大的功能,使得我們沒有必要直接去引用一個webservice解決方案的dll。我們只需在"引用"上右擊,選擇"添加web引用……",此時彈出如下圖2所示的視窗:



  圖2

  在地址欄中輸入要調用webservice的位置,如

      http://localhost:8088/webservice/math.asmx

  此時,在myTest.sln下增加了一個"web引用"檔案夾,在此檔案夾下有一個"localhost1"項目,如下圖3:





  圖3

  圖中web引用檔案夾下的localhost1便是對另一個解決方案中的webservice引用。下面我們來看如何按這種引用方式在testForm.aspx表單中調用該webservice方法:

  首先,我們在testForm.aspx表單中增加一個新按鈕,命名為localhost1。

  在localhost1按鈕的localhost1_click()事件中編碼如下:

private void localhost1_Click(object sender, System.EventArgs e)
{
float x,y;
localhost1.math math1=new localhost1.math();
/*在此定義了webservice對象math1*/
x=16.1f;
y=17.89f;
msg.InnerHtml=math1.add(x,y).ToString();
/*在此調用了math1對象的add()方法,並將結果顯示在名為msg的<span>上*/
}



  當我們單擊localhost1按鈕時,這段代碼同樣完成了相應的方法調用。

  3、在Internet上調用WebService方法 事實上,在第2種情形的"web引用"方式是當前情況的一個特例。因為,當我們將web引用地址欄的地址改為指向Internet上某台主機上的一個webservice時便是在Internet上調用WebService方法。

  不妨讓我們調用microsoft asp.net快速入門中的webservice範例,我們在添加"web引用"時,在地址欄中輸入下面的webservice 地址:

      http://chs.gotdotnet.com/quickstart/aspplus/samples/

        services/DataService/VB/DataService.asmx

  如圖3所示,在"web引用"檔案夾下可以看見已經添加了一個新項目"com.gotdotnet.chs",在testForm.aspx表單中再新增一個按鈕gowebservice,在gowebservice的click()事件中編碼如下:

private void gowebservice_Click(object sender, System.EventArgs e)
{
com.gotdotnet.chs.DataService goWS=new com.gotdotnet.chs.DataService();
/*在此定義了webservice對象goWS*/

DataSet ds=new DataSet();
ds=goWS.GetTitleAuthors();
/*在此調用了goWS對象的GetTitleAuthors()方法,該方法返回一個DataSet對象*/
msg.InnerHtml=ds.Tables["Authors"].Rows.Count.ToString();
/*在此將Authors表的記錄條數顯示在名為msg的<span>上*/
}



  當我們單擊gowebservice按鈕後,對Internet上microsoft asp.net快速入門中的webservice範例的調用同樣也會顯示在msg上。

  4、利用webservice.htc調用WebService方法 此方法不在贅述,請參看microsoft網站。

  <b>三 結束語</b>

  總之,WebService的功能非常強大,但在用戶端如何調用webservice方法卻難以找到相應的介紹,致使多數開發人員使用第4種方法,本人根據自己對vs.net的應用經驗總結了以上幾種方法,僅供vs.net開發人員參考!


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。