Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用WCF PerCall服务保护资源_C#_Multithreading_Wcf - Fatal编程技术网

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

C# 如何使用WCF PerCall服务保护资源,c#,multithreading,wcf,C#,Multithreading,Wcf,我正在使用一个WCF服务,它需要是一个每次调用的服务来处理负载,但是服务中有一些方法需要是线程安全的 e、 g 我担心,如果有两个创建客户的调用(具有相同的详细信息),我就有可能在数据库中创建两个客户,而我实际上只希望创建一个 在允许每次呼叫都保留我的服务的同时,是否有办法解决此问题 你把线程安全和数据库并发混淆了。PerCall服务不会带来线程安全问题,除非您在服务例程中生成多个线程(您应该避免) 您的问题应该重新表述为,您关心的是插入期间客户表上的数据库一致性和并发性(例如,没有看到其他人创

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

e、 g

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


在允许每次呼叫都保留我的服务的同时,是否有办法解决此问题

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

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

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

您最好编写一个存储过程(比如
CreateCustomerIfNotExists
),该存储过程有一个事务并检查某个客户ID是否存在,如果不存在,则将在表中插入一个新行


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

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

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

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

您最好编写一个存储过程(比如
CreateCustomerIfNotExists
),该存储过程有一个事务并检查某个客户ID是否存在,如果不存在,则将在表中插入一个新行


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

如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!您如何知道客户存在两次??数据库中的客户编号字段??只需对其设置一个
唯一的
约束!这样,无论有多少并发调用试图创建该客户,数据库中都只能存在一个。如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!您如何知道客户存在两次??数据库中的客户编号字段??只需对其设置一个
唯一的
约束!这样,无论有多少并发调用试图创建该客户,数据库中都只能存在一个客户
void CreateCustomer(Customer customer)
{
//If customer does not exists in DB
   //Create customer
}