我正在开发一个项目,我必须将数据存储在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
的更新值?
答案 0 :(得分:1)
您可以使用静态字段。但显然一旦你这样做,你需要同步对它的访问,因为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];
}
}