Я использую WCF 4 с C #. Я использую InstanceContextMode для Single . Экземпляр класса, реализующего мой контракт, создается с использованием конструктора, который принимает ссылку на объект, на котором размещен сервис. Объект службы передается при создании и размещении хоста службы.
Код реализации услуги:
[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
объект, чтобы получить ссылку
объекта, на котором он находится?
Могу ли я что-нибудь сделать
иначе решить проблему?
Спасибо.