我在C#中使用WCF 4。我正在使用InstanceContextMode設置爲單個。實現我的合約的類的實例是使用構造函數創建的,該構造函數接受託管服務的對象的引用。在創建和託管服務主機時傳遞服務對象。訪問承載服務的對象
服務實現代碼:
[ServiceBehavior(UseSynchronizationContext = false,
InstanceContextMode = InstanceContextMode.Single)]
public class ServiceImpl : IMyContract
{
private ServiceHoster _sh;
ServiceImpl(ServiceHoster sh)
{
_sh = sh;
}
public string Call(string input)
{
... //Do some processing on the input string
return _sh.ProcessCall(string input);
}
}
ServiceHoster代碼:
public class ServiceHoster
{
private ServiceImpl ns;
ServiceHoster()
{
...
Start();
}
private void Start()
{
//Host Service
ns = new ServiceImpl(this);
//Instantiate NetTCP service
_tcpServiceHost = new ServiceHost(ns, new Uri("net.tcp://localhost:8089"));
_tcpServiceHost.Open();
}
private void Stop()
{
if(ns != null && ns.State == CommunicationState.Opened)
ns.Close();
}
public string ProcessCall(string input)
{
...
return result;
}
}
說我現在面臨的問題是,我們需要客戶端和服務器之間的雙向通信。對於雙工連接,我們需要設置InstanceContextMode設置爲PerSession。
我的問題是:
我可以使用多個值 InstanceContextMode一些如何(我認爲這 是不可能的)?
是否有任何其他方法可以讓ServiceImpl 對象獲得託管它的對象的參考 ?
有什麼我可以做的 不同來解決問題?
謝謝。
有沒有實現在應用程序中單獨服務的特定需求?單身WCF服務很少有很好的用例。如果這是一個問題,這個實現幾乎可以殺死服務可伸縮性。 – 2011-05-02 13:54:55
是的,serviceImpl對象需要引用承載該服務的ServiceHoster對象。你能指引我提到你提到的用例嗎?謝謝。 – sunilkumarba 2011-05-06 11:00:03
下面的鏈接提供了有效使用WCF中單例的最佳總結。如果你沒有在接受的答案中列出任何東西,你應該使用像wsDualHttpBinding這樣的綁定或其他任何支持雙工通信的綁定。鏈接:http://stackoverflow.com/questions/1756487/should-wcf-service-typically-be-singleton-or-not – 2011-05-06 13:19:07