WCF入門(五) 單向通知

2021-09-06 07:38:56 字數 1295 閱讀 2158

目前我們使用的呼叫方式基本都是一種請求-響應模型:客戶端發起請求,等待遠端伺服器響應,然後獲取返回值。這種方式和呼叫本地函式非常類似,但是,遠端方法呼叫還有另一種方式——單向通知。

對於有返回值的函式,發起請求後,等待遠端伺服器返回結果是必要的,因為需要返回值進行下一步操作。但是,對於沒有返回值的函式,等待伺服器處理完成有時就沒必要了,因為本來就沒有返回值,等待響應就是等待伺服器的處理完成。但是,很多時候,客戶端無需關心伺服器什麼時候才能處理完成,這個時候等待伺服器端完成後才返回就是浪費時間了。

例如:對於如下的乙個客戶端上報通知的服務:

[servicecontract]

publicinte***ceiservice1

publicclassservice1: iservice1}

在這個服務中,客戶端並沒有必要關心伺服器何時處理完成,但仍需要等待伺服器端處理完成,3秒後才能返回。這個是不大合理的,為了解決這個問題,可以使用單向通知方式。

再接著回到wcf中來,wcf中使用單向通知是非常簡單的,只需要將operationcontract中的isoneway=true

設定上即可(不要在非void函式裡面設定isoneway=true

,設定後服務啟動不起來)。

[servicecontract]

publicinte***ceiservice1

而實現則無需任何改動,此時再來呼叫該函式,馬上就返回了,

這個符合我們的預期結果,再來看看響應的訊息,和前面的雙向通知相比較,它是沒有響應訊息的。

另外,可以用async void函式來實現單向通知,從而使得可以使用await語法糖。但是需要注意的是,像我在文章c# 5.0 async函式的提示和技巧中所提到的那樣,該函式中的未捕獲異常會導致伺服器崩潰,需要catch所有異常,我個人並不建議這麼用,直接使用普通的void函式,呼叫另外乙個可以使用await語法糖的async task函式即可。

publicasyncvoidnotify(stringmessage)

最後需要說明的是,雖然單向通知可以加快響應速度,但同時由於其不關注返回結果,遠端處理出錯時也是感知不到的(異常本身也是乙個返回值),在使用的時候需要考慮到這一點。

WCF入門(十一) WCF安全

乙個強大的wcf服務安全系統,擁有兩種安全模式或級別預期的客戶端可以訪問的服務。這是常見的分布式事務的安全威脅正在放緩,在很大程度上由wcf決定。wcf服務有四個主要的安全功能,如下圖所示。wcf提供以下傳輸安全模式,以確保在客戶機和伺服器之間的安全通訊。多樣傳輸安全模式如下所述。name wcfs...

WCF入門(四) WCF架構

wcf是乙個分層架構,為開發各種分布式應用的充分支援。該體系結構在下面將詳細說明。約定層旁邊就是應用層,並含有類似於現實世界的約定,指定服務和什麼樣的資訊可以訪問它會使操作的資訊。約定基本都是在簡短的討論如下四種型別。服務執行時層僅僅是約定層之下。它指定在執行時出現的各種服務行為。有許多態別的行為,...

wcf 入門示例

剛開始學習wcf,根據官方 的說明寫下的 建立乙個類庫專案gettingstartedlib,首先新增wcf引用system.servicemodel 新增介面icalculator,新增類calculatorservice實現介面icalculator icalculator using syst...