我想避免在我的系统中生成重复的数字。
CreateNextNumber()将:
我想避免两个客户端同时调用此方法。我担心他们会拉出相同的最后一个数字,增加一个,然后返回两个客户的重复数字。
问题:
答案 0 :(得分:2)
如果您使用InstanceContextMode.Single和ConcurrentcyMode.Single,您的服务将一次处理一个请求,因此会为您提供此功能 - 但是,在数据库中可以更好地处理此问题
几个选项:
对于您的问题,您可能会在instancing and concurrency上找到我的博客文章
答案 1 :(得分:0)
单个实例不会停止服务同时处理请求,我不这么认为。您需要一个服务器端同步机制,例如Mutex,以便尝试获取此数字的所有代码首先锁定。实际上,您可能会在服务代码中使用静态锁定对象,这可能比互斥锁更简单。
基本上,这不是WCF配置问题,这是一个更普遍的并发问题。
private static object ServiceLockingObject = new object();
lock (ServiceLockingObject)
{
// Try to increment your number.
}
答案 2 :(得分:0)
不要打扰WCF设置,而是在数据库中生成唯一的数字。有关详细信息,请参阅my answer to this question。您尝试在WCF中执行的任何操作都会出现以下问题: