Web Service 異步調用

 

Web Service 異步調用

       最近在完成一些與Socket 通訊相關的東西,希望能夠將Socket 通訊的結果以Web Service 的形式發佈出來,但是由於Socket 通訊是異步的,所以想當然的認爲Web Service 應該異步返回,於是去搜索了一些資料。收集回來才發現有誤。但是卻是很好的例子代碼,現摘錄如下:

在.net1.x中,異步WebService異步調用的一般方式爲調用方法XX對應的BeginXX方法來完成,其過程類似於異步委託的使用。

  體驗.NET 2.0的優雅之異步Web服務調用

在.net2.0中(準確的說是vs.net 2005中),異步WebService異步調用的方式的例子:

void DoSomethingTest()

{

 localhost.Service service = new WindowsApp.localhost.Service();

 service.HelloWorldCompleted += new WindowsApp.localhost.HelloWorldCompletedEventHandler(service_HelloWorldCompleted);

 // do Asyn calling here

 service.HelloWorldAsync();

}

void service_HelloWorldCompleted(object sender, WindowsApp.localhost.HelloWorldCompletedEventArgs e)

{

 if (e.Error == null)

 {

  MessageBox.Show(e.Result);

 }

 else

 {

  MessageBox.Show(e.Error.Message);

 }

}

  服務器端代碼

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class Service : System.Web.Services.WebService

{

 [WebMethod]

 public string HelloWorld() {

  return "Hello  public Service () {}

World";

 }

}

  很簡單,沒有了AsyncCallback、IAsyncResult 這兩個煩人的東西,調用的代碼變得簡潔、優雅了,而且可以從e.Result得到強類型的返回值(上例爲"Hello World")。但是,有興趣的話,可以看看vs.net2005生成的Referance.cs文件,那可比2003中的複雜很多。其中可以看到 System.ComponentModel.AsyncCompletedEventArgs 、 System.Threading.SendOrPostCallback(delegate)這兩個在 .net 1.x 中沒有的“怪物”,估計用到的地方還不止WebService客戶端。

 

源文檔 <http://cache.baidu.com/c?word=web%2Cservice%2C%D2%EC%B2%BD&url=http%3A//www%2Ecppblog%2Ecom/guohan/archive/2006/01/09/2500%2Easpx&b=58&a=17&user=baidu>

發佈了3 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章