2012-08-26 31 views
2

我創建了一個WCF服務庫。然後我創建了一個Windows服務來承載這個WCF服務。 現在我想在同一個窗口服務中調用WCF服務庫中定義的函數。創建WCF服務,託管在窗口服務中,嘗試在該服務中使用。怎麼做?

protected override void OnStart(string[] args) 
    { 
     if (serviceHost != null) 
      serviceHost.Close(); 

     // Create a ServiceHost for the Registration type and 
     // provide the base address. 
     serviceHost = new System.ServiceModel.ServiceHost(typeof(Registration)); 

     // Open the ServiceHostBase to create listeners and start 
     // listening for messages. 
     serviceHost.Open(); 

     Registration r = new Registration(); 

     System.Threading.Thread t = new System.Threading.Thread(r.ReadAttempt); 
     Object passParameterToCallback = null; 
     t.IsBackground = false; 
     t.Start(passParameterToCallback); 
    } 

回答

1

的ServiceHost類也應該能夠採取的服務,而不是一個類型的單一實例,根據本: http://msdn.microsoft.com/en-us/library/ms585487.aspx

所以,儘量初始化類,登記註冊類型,並傳遞到ServiceHost。這隻適用於我所說的,帶有單例類型的WCF服務,或者更具體地說,您將InstanceContextMode設置爲Single。

這樣你應該留下一個對類的引用,並應該能夠很好地訪問它。

雖然這可能值得用另一種方式來思考。如果你的問題只是通知Windows服務有關WCF服務的事情,那麼如何在你的WCF服務中定義一個事件,你的Windows服務可以通過這種方式訂閱和接收來自WCF服務的事件?

如果您需要在WCF服務中使用邏輯,那麼如何將該邏輯提取到外部類或使其成爲靜態類,以便您可以在任何地方使用它。

好運

2

如果你只需要調用一個方法在同一類,那麼你已經在做,在你的代碼僅通過創建一個new Registration(),並呼籲它的方法。沒有理由通過WCF進行調用。

如果由於某種原因,您確實想通過WCF調用您的服務給自己,那麼您應該構造一個客戶端而不是實際的類。

如果您需要調用與您的WCF服務對象相同的實例,則必須將WCF服務設置爲Single,然後調用您的WCF客戶端。

或者使用this constructorServiceHost是發生在一個單獨的對象,然後調用同一個對象實例的方法,或再使用ServiceHost.SingletonInstance屬性來找回那種被傳遞到構造該實例。

相關問題