WCF中的非同步實現

2022-01-30 14:25:14 字數 2681 閱讀 2819

目錄:

wcf客戶端非同步呼叫服務

服務端的非同步實現 

非同步**類的生成:

}1、客戶端非同步呼叫服務

客戶端非同步呼叫服務主要方式有幾種:

1.1、直接呼叫非同步方法:

在生成的**類中,有beginadd\endadd等服務契約中定義的add操作的非同步實現。直接呼叫beginadd方法,實現客戶端非同步呼叫服務端方法。在呼叫beginadd方法後,可執行一些其他操作,這些操作與服務端add呼叫並行執行,add呼叫最終通過endadd方法得到。

測試**如下:

客戶端**:

iasyncresult asyncresult = calculatorclient.beginadd(1, 

for(

inti = 

0; i 

10; i++)

int resul = calculatorclient.endadd(asyncresult);

console.writeline(string.format("

計算結果:

",resul));

服務端**:

public

intadd(

intx, 

inty)

console.writeline("

開始計算...

");return x + y;

}服務端輸出如下:

客戶端輸出如下:

這種方式使用了endadd方法,如果服務端沒有執行完成,當前執行緒會被阻塞直到非同步呼叫的服務完成後結束。如客戶端**保持不變,將服務實現改為如下:

for(

inti = 

0; i 

20; i++)

thread.sleep(5000);

console.writeline("

開始計算...

");return x + y;

如果在服務端讓執行緒睡眠幾秒,就可看到客戶端會被阻塞:

1.2、通過**的方式非同步呼叫服務:

iasyncresult asyncresult = calculatorclient.beginadd(1, 2, 

int ;

int result= calculatorclient.endadd(asyncresult1);

calculatorclient.close()

console.writeline(string.format("

+=", array[0], array[1], result));

}, new );

這種方式是對服務的非同步呼叫完成以後,自動呼叫**來獲取結果。

1.3、通過為非同步操作註冊事件

//進行非同步呼叫 

calculatorclient.addasync(10, 36, new );

//為非同步呼叫完成定義觸發事件 

calculatorclient.addcompleted += calculatorclient_addcompleted;

console.writeline("

服務呼叫完成...

");console.readkey();

//非同步呼叫完成後執行 

private

static

void calculatorclient_addcompleted(object obj, addcompletedeventargs args)

2、服務的非同步實現:

[operationcontract(asyncpattern = 

true

)]iasyncresult begincalculator 

(int x,int y ,asynccallback asynccallback, object state);

void endcalculator(iasyncresult);

然後在實現契約介面的服務中,將方法實現為非同步的。

基於wcf的非同步上傳

operationcontract public void doupload string filename,byte context,bool 上傳目錄 string folder upload if system.io.directory.exists folder 檔案讀寫模式 filemod...

WCF 非同步呼叫

說明 wcf客戶端非同步呼叫與服務端 沒有關係,只是和客戶端的 有關係。服務端服務介面 using system using system.collections.generic using system.linq using system.text using system.servicemode...

WCF之非同步呼叫

非同步呼叫 獲得系統更好的吞吐量。使用者體驗性更好。但有時弄不好也會增加系統負擔。有兩種方法。我這裡只採用wshttp的方式。並且是採用新增服務引用的方法來做的。只需兩下就可以完成。1 在新增的 服務引用 上。配置 服務引用 勾選 以非同步來操作 2 它會自動新增 begin方法 和 end方法 這...