wcf 的非同步呼叫是基於訊息交換(message exchange)來實現的,和我們通常使用委託來實現非同步呼叫有所不同。
編寫步驟:
1. 建立服務契約。
[servicecontract(sessionmode=sessionmode.required)]
public inte***ce icalculate
2. 為契約方法新增非同步版本。
我們為 add 方法新增了 beginadd 和 endadd 兩個在 .net sdk 中 "常見" 的非同步操作方法。注意 beginadd 方法中我們新增了非同步宣告,而 endadd 方法沒有。還有就是要注意非同步版本方法的引數。
[servicecontract(sessionmode=sessionmode.required)]
public inte***ce icalculate
3. 實現服務契約。
你可能注意到了,我們並沒有建立 add 的委託原型,也沒有 "真正" 實現 beginadd 和 endadd。這是因為訊息交換會 "非同步" 呼叫 add 方法,所有的非同步版本方法只是用來建立訊息宣告而已。
public class calculateservice : icalculate
public iasyncresult beginadd(int a, int b, asynccallback callback, object state)
public int endadd(iasyncresult ar)
}4. 我們給乙個完整版本,看看執行結果。
console.writeline("客戶端呼叫 beginadd 完成: ", datetime.now);
console.writeline(channel.endadd(ar));
console.writeline("客戶端呼叫 endadd 完成: ", datetime.now); }
} }輸出:客戶端呼叫 beginadd: 2007-4-1 20:56:47
客戶端呼叫 beginadd 完成: 2007-4-1 20:56:47
伺服器方法 add 開始執行: 2007-4-1 20:56:49
伺服器方法 add 執行完成: 2007-4-1 20:56:54
3客戶端呼叫 endadd 完成: 2007-4-1 20:56:55
callback...
最後需要注意的是,我們必須使用支援 session 的 binding 物件 (basichttpbinding 會丟擲異常)。
附:其實最簡單的辦法不是手工新增 asyncpattern / begin*** / end***,而是手工使用 svcutil.exe 生成客戶端**,記住加上 "/async" 引數。
WCF 非同步呼叫
說明 wcf客戶端非同步呼叫與服務端 沒有關係,只是和客戶端的 有關係。服務端服務介面 using system using system.collections.generic using system.linq using system.text using system.servicemode...
WCF之非同步呼叫
非同步呼叫 獲得系統更好的吞吐量。使用者體驗性更好。但有時弄不好也會增加系統負擔。有兩種方法。我這裡只採用wshttp的方式。並且是採用新增服務引用的方法來做的。只需兩下就可以完成。1 在新增的 服務引用 上。配置 服務引用 勾選 以非同步來操作 2 它會自動新增 begin方法 和 end方法 這...
WCF 非同步呼叫問題
新增引用時生成 勾選允許生成非同步操作 wcf非同步呼叫三種方式 第一種 直接呼叫非同步方法 var serviceclient new myserviceclient serviceclient.messageasync erviceclient.close 第二種 begin end方式 ser...