所以我試圖在具有多個AppDomain的應用程序中設置一個記錄器。我想在內存中爲所有記錄的消息創建一箇中央存儲。我決定使用名爲管道綁定的WCF,並創建了一個log4net appender,它創建一個通道並將所有日誌事件發送到主服務。跨應用程序域的多個服務實例
問題是我似乎得到每個AppDomain中的服務的新副本,因此我的單個日誌最終成爲多個日誌。
的設置是我有一個服務合同接口,ILogSink,和單身(單身實際和InstanceContextMode在服務行爲屬性設置爲單)服務實現ResultLog它可以對記錄的消息的集合。在我的父AppDomain中,我實例化ServiceHost與ResultLog,並打開該服務。然後我附上一個Appender WcfResultAppender,它具有通過ChannelFactory CreateChannel調用(到服務主機地址)創建的代理副本ILogSink。在啓動時,每個子AppDomain都會創建它自己的WcfResultAppender副本。
我對WCF很陌生,我錯過了什麼?
編輯:我還沒有收到任何好的迴應 - 我已經把問題放在一邊,但它是一個迫切的需要。看起來好像我在每個應用程序域中都獲得了不同的服務類副本,並且出於某種原因數據仍留在這些對象中。我預計後臺會有一些東西使用綁定來解決在主AppDomain中創建的服務,並通過該服務傳遞數據,但其他事情正在發生。我已經閱讀了無數WCF的解釋和例子 - 我注意到的一件事是沒有一個例子提供保留數據的服務。但是,我仍然無法找到任何與我的期望相矛盾或確認的東西。
你是如何託管你的單身人士? –
暫時有一個處理程序類,它具有對單例服務以及單個AppDomain的引用。我正在實例化單例以及處理程序中的服務主機。最終,我會重構這個以啓動並託管這個級別以上的單例,但現在我正在使用一個創建的處理程序/ appdomain進行測試。 – badlander