首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用WCF PerCall服务保护资源

如何使用WCF PerCall服务保护资源
EN

Stack Overflow用户
提问于 2011-03-14 12:40:54
回答 1查看 319关注 0票数 0

我使用的是WCF服务,它需要是每个调用的服务来处理负载,但是服务中的某些方法需要是线程安全的。

例如:

代码语言:javascript
复制
void CreateCustomer(Customer customer)
{
//If customer does not exists in DB
   //Create customer
}

我担心如果有两个创建客户的调用(具有相同的详细信息),我会冒着在数据库中创建两个客户的风险,而我实际上只希望有一个客户。

有没有办法解决这个问题,同时允许我的服务保留在每个调用中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-14 12:49:02

您混淆了线程安全性和数据库并发性。PerCall服务不会造成线程安全问题,除非您在服务例程中派生多个线程(应该避免)。

您的问题应该被重新表述为,在插入期间,您关心数据库一致性和Customer表上的并发性(例如,看不到其他人创建的客户)。

在关系数据库中有一种非常标准化的方法来满足ACID属性(原子性、一致性、隔离性、持久性)来处理这个问题:在事务中包装检查/插入。

更好的做法是编写一个具有事务的存储过程(比如CreateCustomerIfNotExists),并检查某个客户ID是否存在,如果不存在,则将新行插入到表中。

关系数据库的ACID属性会自动阻止您担心的事情发生。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5294802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档