2010-06-22 58 views
1

服務,我有以下WCF代碼:指針從ServiceHost的

ServiceHost host = null; 

if (host == null) 
    host = new ServiceHost(typeof(RadisService)); 

我怎樣才能得到一個指向我RadisService,使與它通話?

那麼這是真的用於測試目的,但請允許我問教育目的這個問題。如果我的服務在計算機上運行(使用GUI主機),來自不同遠程計算機的多個客戶端連接到該服務並通過GUI在我的服務上發表評論會發生什麼情況。

在我服務的代碼如下所示:

public class MyClass 
{ 
    [DataMember] 
    static Dictionary<String, Variable> m_Variables = new 
     Dictionary<String, Variable>(); 
    .... 
} 

[ServiceContract] 
public interface IMyClassService 
{ 
    [OperationContract] 
    bool AddVariable(String name, Variable value); 

    [OperationContract] 
    bool RemoveVariable(String name); 

    [OperationContract] 
    bool GetVariable(string name, Variable variable); 

    [OperationContract] List<String> GetVariableDetails(); 
    ... 
} 
從我的服務主機GUI

所以我想能夠訪問GetVariableDetails(),和預覽所有從各個不同的客戶端添加評論這點。我將如何實現這一目標?

回答

2

如果你讓你的服務,您可以創建服務的實例,並給它一個單身的ServiceHost

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class CalculatorService: ICalculatorService 
{ 

.... 

CalculatorService service = new CalculatorService(); 
ServiceHost serviceHost = new ServiceHost(service, baseAddress); 
+0

這是完全正確的答案,這基本上是我尋找的答案,因爲我的服務是一個單身人士。謝謝。 – Tamer 2010-06-27 16:20:03

+0

請注意,經常讓你的服務變成單身並不是件好事。它不利地影響代碼的可伸縮性和可測試性。 – 2012-09-25 14:24:24

0

你不能。 ServiceHost將託管1-n個服務類實例來處理傳入的請求,但是這些實例通常是「每個呼叫」的,例如,當新的請求進入時創建一個服務類實例,在服務類上調用一個方法,然後再處理它。

因此,ServiceHost實際上並沒有任何可以使用和調用方法的「服務」類實例。

你究竟想達到什麼目的?

更新:服務主機應該除了託管服務之外不應該做任何事情 - 它絕對不應該調用服務本身。

您試圖實現的是某種管理控制檯 - 一個GUI,顯示系統中當前的註釋。通過直接的數據庫查詢來完成這項工作,或者只需要一個GUI控制檯來調用你的服務並獲取這些條目 - 但是不要把這種負擔放在ServiceHost上 - 這是放錯這個功能的地方。

+0

這是一個正確的邏輯的答案,因爲服務主機真的不應該負責這個。感謝您指出了這一點。 – Tamer 2010-06-27 16:19:08