Допустим есть обычная Class Library ( не WCF ) , в которой есть реализация следующих методов
public static class TestStatic
{
private static Thread m_WorkThread;
private static string m_WorkResult;
public static void InitWork()
{
m_WorkThread = new Thread( DoWork );
m_WorkResult = "";
}
public static void BeginWork()
{
m_WorkThread.Start();
}
public static void EndWork()
{
m_WorkThread.Stop();
}
public static string GetWorkResult()
{
return m_WorkResult;
}
}
Далее есть WCF Service Library в которой необходимо создать интерфейс для управления TestStatic, контракты описывать не буду и так понятно,
приведу только класс WCF
public class WCFTestStatic
{
public void BeginWork()
{
TestStatic.BeginWork();
}
public void EndWork()
{
TestStatic.EndWork();
}
public string GetWorkResult()
{
return TestStatic.GetWorkResult();
}
...
}
Теперь если запустить этот сервис и запустить несколько WCF клиентов получается что на каждого клиента создается свой поток.
Отсюда несколько вопросов :
1) Будут ли эти потоки работать с разными данными TestStatic ? То есть создаться несколько m_WorkThread или TestStatic будет синглетоном для всех потоков. Или нужно обязательно указывать [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
2) Можно ли как-то на уровне TestStatic защититься от того что будет существовать более одного WorkThread ? Т.е. на уровне библиотеки гарантировать что WorkThread всегда один.
3) Как можно реализовать защиту от запуска двух одинаковых WCF сервисов в сети , слышал что в .net 4.0 появилась возможность сервису обнаруживать доступные сервисы в локальной сети. Так вот , допустим при старте WCF сервис сначала ищет идентичный..если нашел, ругается и не запускает рабочий поток, если не нашел — запускает.