2012-04-27 8 views
0

我想ASYN CTP使用與WCF,但我有問題,因爲任務是不序列化。WCF:async CTP:是否可以使用?

我已經安裝了CTP V3。

是否有可能ASYN CTP使用與WCF?是否需要配置比僅安裝CTP更多的東西?我認爲如果不可能使用異步CTP噴射,也許而不是在服務端使用異步CTP,我可以實現異步CTP調用正常方法(而不是異步方法)的異步方法服務。這是一個不錯的選擇?在這種情況下,該服務不會實現異步方法。

另一種選擇是在服務端,實現異步方法與開始/結束的方法,在包裝使用Task.Factory.FromAsync方法任務這兩種方法。但這是更多的工作。

所以我的問題是,如果我想的是,雖然它等待服務響應,我可以使用兩種解決方案的客戶不會被阻斷。首先在調用服務的常規方法的客戶端中使用異步CTP,或者使用Task.Factory.FromAsync在服務中使用異步方法。哪個是最好的選擇?爲什麼?

謝謝。 Daimroc。

回答

1

我不知道2010年左右VS帶有Async CTP,但與VS 11測試版(你應該使用這樣),你可以簡單地定義一個返回Task操作:

[OperationContract] 
Task<string> GetData(int value); 

然後使用async實現它:

public async Task<string> GetData(int value) 
{ 
    return await …; 
} 

我將承擔同樣的方法將與異步CTP工作,但它只是一個假設。

+0

如果我使用[OerationContract],我得到的錯誤是任務不能被序列化,因此CTP可能與VS2010中的WCF不兼容。 – 2012-04-27 15:52:05

+0

是的,這是可能的。你爲什麼不試試VS 11? – svick 2012-04-27 16:38:24

+0

那麼,VS 11仍然是一個測試版,所以在這種情況下它不是一個選項,它將用於生產應用程序。 – 2012-04-27 17:29:17

0

,以實現最簡單的方法非阻塞的客戶端調用是在客戶端上,有兩個原因:可以通過現有的VS工具

  • 傳遞任務在服務中產生

    1. 客戶端異步方法邊界將要求您編寫自己的同步功能。

    要生成的客戶端任務<>基於(因此異步/ AWAIT兼容),用於服務的方法:

    1. 在VS11,一個新的複選框存在:「生成基於任務的方法」下「配置服務引用」對話框中的「允許生成異步操作」。 (我相信這是沒有記錄)
    2. 對於您可以使用擴展描述here生成基於任務的方法CTP。