Сервисный магазин WCF и коллекция манипуляций? - PullRequest
1 голос
/ 13 февраля 2012

Я работаю над проектом, в котором мне нужно хранить данные в службе WCF, но я не уверен, как сохранить изменения при манипулировании данными.

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode =
InstanceContextMode.Single,UseSynchronizationContext = true)]
public class TestService : ITestService {
    private List<TestClass> cl;

    public TestService()
    {
        cl = new List<TestClass>();
        TestClass tc = new TestClass(5);
        cl.add(tc);
    }

    public void Diminish(int x)
    {
         cl[0].Value -= x;
    }

    public TestClass ReturnValue(int p)
    {
        return cl[p];
    }
}

Так что теперь, когда клиент использует этот сервис, как я могу отправить обновленное значение коллекции cl?

1 Ответ

1 голос
/ 13 февраля 2012

Вы можете использовать статическое поле.Но, очевидно, как только вы это сделаете, вам нужно синхронизировать доступ к нему, потому что класс List<T> не является поточно-ориентированным:

public class TestService : ITestService {
    private static List<TestClass> cl;
    private static object _syncRoot = new object();

    static TestService()
    {
        cl = new List<TestClass>();
        TestClass tc = new TestClass(5);
        cl.Add(tc);
    }

    public void Diminish(int x)
    {
         lock (_syncRoot)
         {
             cl[0].Value -= x;
         }
    }

    public TestClass ReturnValue(int p)
    {
        lock (_syncRoot)
        {
            return cl[p];
        }
    }
}

, или вы также можете использовать класс SynchronizedCollection<T>что потокобезопасно:

public class TestService
{
    private static SynchronizedCollection<TestClass> cl;

    static TestService()
    {
        cl = new SynchronizedCollection<TestClass>();
        TestClass tc = new TestClass(5);
        cl.Add(tc);
    }

    public void Diminish(int x)
    {
        cl[0].Value -= x;
    }

    public TestClass ReturnValue(int p)
    {
        return cl[p];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...