我已经实现了如下的WCF方法。
[ServiceContract]
public interface IService1
{
[OperationContract]
string string AddUser(string name,string department,string empCode);
}
public class Service1 : IService1
{
public string AddUser(string name,string department,string empCode)
{
UserDAL.LogRequest(name,department,empcode); //Log request in database
bool isExist=UserDAL.IsExist(name,department,empCode); //Check same user exist or not
if(isExist==false)
{
UserDAL.Add(name,department,empCode);
}
}
}
此WCF由.Net winform应用程序,SOAP UI,ORACLE等使用。在插入用户详细信息之前,我已检查数据库中不存在相同的用户(即.UserDAL.IsExist)。但它仍然在DB中插入了重复的记录。我还检查了“UserDAL.IsExist'方法,如果DB中存在相同的用户详细信息,则返回true。我注意到在几分之一秒内插入了重复记录。
答案 0 :(得分:2)
嗯,是的。你的代码不安全。它将检查然后插入。如果两个人同时使用相同的信息呼叫您的服务怎么办?
Call1:UserDAL.IsExist返回false
Call2:UserDAL.IsExist返回false
Call1:插入
Call2:失败
您需要一个同步的单位。那应该是你的数据库。你应该插入并监听失败。为什么您的数据库甚至接受重复插入?你需要约束。