2009-12-14 44 views
7

是什麼標記一個WCF方法與[OperationContract(IsOneWay = true)]和檢查生成的異步操作複選框之間有什麼區別?

[OperationContract(IsOneWay = true)]

屬性和檢查生成異步操作複選框添加服務時參考之間的差?

從我所讀到的看來,調用的異步性質應該只在客戶端定義。 如果是這樣的話,[OperationContract(IsOneWay = true)]的要點是什麼?

現在,我只需要在WCF方法中運行以下方法。

public void UpdateIndex(IndexElement[] indexElements) 
    { 
     // start the update on a new thread. 
     Thread thread = new Thread(() => UpdateIndexThread(indexElements)); 
     thread.Start(); 
    } 

我創造了我的客戶端的代碼服務的參考,我只需撥打:

indexerClient.UpdateIndex(indexElements); 

哪裏indexerClient是我的WCF服務的實例。

這是否也適用?它似乎並沒有,就好像它在返回之前等待線程完成。

回答

11

這些是非常不同的。

在概念層面上,IsOneWay = true表示消息傳遞模式是「消失而忘記」,而不是消息傳遞。 「請求 - 響應」。也就是說,IOW = true表示存在從客戶端到服務器的消息,但不是從服務器到客戶端的答覆。相反,即使返回類型爲空(例如'空'消息),非IOW = true方法通常也會有響應消息。

異步模式用於客戶端代碼的行爲方式 - 例如,它會阻止等待返回值嗎?異步是一個'本地'的事情,詳情請參閱this blog。您可以擁有同步服務器的異步客戶端或異步服務器的同步客戶端。 WCF將在引擎蓋下爲你提供編程模型。如果你有例如請求 - 響應消息傳遞模式並使用「生成異步」,生成的客戶端將爲您提供例如一種可以調用異步的方法(例如發送消息,並在回覆到達時獲得回調)。

因此,對'本地編程模型'使用'異步',並使用IOW''在線上進行消息傳遞。

請注意,在你的例子中,如果你標記方法IOW = true,那麼我認爲沒有理由在服務器代碼中使用Thread.Start()。你可以直接在WCF給你的服務器的線程上完成這項工作。

+0

這很有道理!非常感謝你 - 清除了很多挫折! – Matt 2009-12-14 23:37:10

+0

只是爲了澄清,這應該讀取這種方式是正確的? 也就是說,IOW = true表示存在從客戶端到服務器的消息,以及從服務器到客戶端的回覆。相反,即使返回類型爲空(例如'空'消息),非IOW = true方法通常也不會有響應消息。 – Matt 2009-12-14 23:42:29

+0

謝謝,我有一句話倒退,我剛編輯修復。 – Brian 2009-12-14 23:47:41

相關問題