簡體   English   中英

在C#和WCF中的線程之間共享對象

[英]Sharing objects between threads in C# and WCF

我有一個公開SOAP WCF服務端點的服務器。 此服務器還使用名為Ensemble的組通信框架(與問題無關),以便與同一群集中的其他服務器進行通信。

我需要在監聽來自其他服務器的傳入消息的單獨線程和調用它們時運行WCF例程的線程之間共享對象/數據。 到目前為止,我做了我能想到的最簡單的事情 - 我創建了一個靜態“數據庫”類,其中包含靜態成員和靜態方法 - 並使用lock()進行同步。 這樣我就可以從服務器和組通信線程訪問這個類。 我的問題是它有點打破了整個“OOP的事情”,我覺得這里可以做一些更聰明的事......

如果您對解決方案的唯一問題是其所謂的“非OOP-edness”,那么您可以改為使用Singleton模式 對於必須具有需要在系統的多個部分之間共享的類的單個實例的情況,這是一種廣泛使用的模式。 這種模式仍然存在爭議,因為有些人認為它是全球變量的美化版本,但它在完成工作方面是有效的。

封裝單獨的線程,該線程偵聽來自其他服務器的傳入消息到一個類說MyCustomService。

編寫WCF服務實現類,其行為為concurrencyMode multiple和I​​nstanceContextMode Single

在WCF服務實現類中編寫事件delagate。 委托將返回MyCustomService類的類型。

當您以編程方式實例化WCF服務時(host.Open),在此之前將委托設置為將返回MyCustomService實例的函數,該實例可以是單例或靜態的。

從服務實例類中,您始終可以調用委托來獲取MyCustomService實例。 檢查是否為null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM