Cтатический класс и WCF сервис
От: Аноним  
Дата: 27.11.10 22:10
Оценка:
Допустим есть обычная 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 сервис сначала ищет идентичный..если нашел, ругается и не запускает рабочий поток, если не нашел — запускает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.