WCF服务存储和操作集合



我正在处理一个项目,在该项目中,我必须将数据存储在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的更新值?

您可以使用静态字段。但很明显,一旦这样做,就需要同步对它的访问,因为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];
    }
}

最新更新