我有一個instanceContextMode = single
服務(稱爲MainService
)。訪問IIS中的WCF單身人士
我也有另一項服務,這項服務必須與上述服務的單個實例(OtherService
MainService
中的調用函數)進行交談。
我決定做的方式是像這樣:
public class OtherService
{
...
MainService.DoSomeFunction();
...
}
,並在MainService
類:
public class MainService
{
private ManualResetEvent manualEventInCtor = new ManualResetEvent(false);
private static MainService _theInstance = null;
private static MainService TheInstance
{
get
{
if(_theInstance == null)
{
MainService.IMainContract dummyClient = new MainService.MainContractClient();
dummyClient.function();
manualEventInCtor.WaitOne();
}
return _theInstance;
}
set
{
_theInstance = value;
}
}
...
public MainService()
{
...
TheInstance = this;
manualEventInCtor.set();
...
}
public static void DoSomeFunction()
{
TheInstance.SomeFunction();
}
...
}
我最終有TheInstance
吸氣創建的僞呼叫服務,以便IIS將創建實例(只有在服務實例尚未由IIS創建時才需要)。這顯然是一個令人費解的黑客,我想知道是否有一個正常的方式。
我不能做一個正常的單身模式,因爲我在IIS中託管,IIS不知道如何從某個函數創建服務實例(例如GetInstance
)。
編輯1
我不想OtherService說話像任何其他服務的MainService,因爲那時MainService必須定義DoSomeFunction作爲服務運行,而且任何人都可以調用該函數DoSomeFunction。 DoSomeFunction適用於OtherService,不適用於任何客戶端。
即使您忽視了我的具體問題,這看起來也是正確的做法。你能否詳細說明如何做到這一點?我真的不明白怎麼做。你的意思是服務中的所有函數應該是GetInstance()。Function()? – Binyamin
@Binyamin我添加了一個草圖。如果這不能解決你的問題,恐怕我不明白。在這種情況下,幫助我解釋我錯過了什麼。 – usr
我現在明白了,謝謝,這應該起作用。 – Binyamin