如何在 WCF 服务中同步数据库访问?

2023-12-07

我以前使用过 WCF 服务,现在我有一个新项目即将开始。 我仍处于设计阶段,我想知道处理以下场景的最佳方法是什么。

我将让多个客户端同时连接到我的 WCF 服务,在服务上触发不同的方法(操作合约):

A.触发的一些方法只是纯粹的“读取”方法(例如 GetListOfCustomers)。

B.有些触发的方法是复杂的“读取”方法(例如 GetAllProductsByCustomerId)。 这些方法需要从数据库获取客户, 检查他的一些东西,然后获取他购买的所有产品。 (也就是说,此方法中有 2 次对数据库的调用)。

C.有些是“写入”方法(例如“RemoveCustomer”或“SetProductOutOfStock”)。

我的问题是 - 如何同步所有这些调用以免出现并发问题?

I don't希望整个服务串行处理调用,因为这会损害客户端的性能(某些调用可能需要 3-4 秒才能处理)。 那么我的解决方案是什么?

对具有“多个”线程的所有客户端使用“单个”实例,然后使用锁对象?这不会导致串行化吗?

或者我是否需要一个不同的锁对象用于“读”和一个不同的锁对象用于“写”?

或者我是否需要“写”功能的锁和“读”功能的其他东西?

这是我在 StackOverflow 上遇到的第一个问题。 感谢任何可以提供帮助的人!

更新:我将使用“Linq-To-SQL”作为我的 ORM。


您不应该担心数据一致性问题,也不应该担心执行数据库查询时的并发性。如果我正确理解您的情况,您需要确保的是在执行一系列您想要“原子”的数据库查询时一致地使用事务。我将尝试用一个例子来解释它:

  1. 从数据库中获取所有客户。
  2. 对于每个客户,执行 查询更新一些相关数据。

在这种情况下,您不希望发生的是数据被另一个查询更改的情况after查询来自1返回和before所有查询来自2完成了。例如,如果其中一位客户同时被删除,则更新相关数据就没有意义 - 这甚至可能导致一些错误。

所以你需要做的就是把类似的东西BEGIN TRANSACTION before 1 and COMMIT after 2。查找您正在使用的 SQL 方言的确切语法。

基本上,这将确保您正在使用的数据不会更改。事实上,它会被你的交易锁定;并且可能使用相同数据的所有其他查询正在等待您的事务完成。数据库智能地执行这种锁定,总是尝试锁定尽可能少的数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 WCF 服务中同步数据库访问? 的相关文章

  • MySQL JOIN 滥用?情况会变得有多糟糕?

    我读了很多关于关系数据库的文章 在每个 SELECT 上使用许多 JOIN 语句 但是 我一直想知道滥用这种方法从长远来看是否会出现任何性能问题 例如 假设我们有一个users桌子 我通常会添加 最常用 的数据 而不是进行任何额外的联接 例
  • SQLite 仅当值不为空时更新列

    Query UPDATE item table SET field1 field1 spanish field2 field2 spanish 问题 我怎样才能更新field1 with field1 spanish ONLY if fie
  • 如何使用 Wix 运行 sql 脚本创建数据库

    我在使用 Wix 创建数据库时遇到问题 我能找到的示例 参见下面的链接 都是首先使用 wix 创建数据库并运行创建表 sql 脚本 问题是我需要将 wix 设置为使用 CREATE DATABASE 运行 sql 脚本来创建数据库和表 而不
  • 如何保证单向方法的可靠性?

    The 关于单向调用 回调和事件您需要了解的信息 http msdn microsoft com en us magazine cc163537 aspx文章讲述 客户端不关心调用结果的事实并不意味着客户端根本不关心调用是否发生 一般来说
  • SQL Server 2005 是否有与 MySql 的 ENUM 数据类型等效的数据类型?

    我正在开发一个项目 我想在表中存储一些容易枚举的信息 MySql 的枚举数据类型正是我想要的 http dev mysql com doc refman 5 0 en enum html http dev mysql com doc ref
  • 如何迁移我的 Heroku 数据库?

    我试过了 heroku rake db migrate and heroku pg push 第一个给我一个 PGerror rake 中止错误 有没有办法用heroku完全重建 重置我的数据库 我似乎在他们的文档中找不到它 编辑 在此之前
  • Condition 接口中的 signalAll 与对象中的 notificationAll

    1 昨天我才问过这个问题条件与等待通知机制 https stackoverflow com questions 10395571 condition vs wait notify mechanism 2 我想编辑相同的内容并在我的问题中添加
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • 是否有一种更简单的方法可以并行运行命令,同时在 Windows PowerShell 中保持高效?

    此自我回答旨在为那些受困于 Windows PowerShell 并由于公司政策等原因而无法安装模块的用户提供一种简单且高效的并行替代方案 在 Windows PowerShell 中 built in可用的替代方案local并行调用是St
  • 如何为新的 Silverlight 应用程序在 WCF、REST、POX 和 RIA 服务之间进行选择

    There a lotSilverlight 应用程序连接回其服务器的不同方式 包括 WCF Windows 通信基础 http msdn microsoft com en us netframework aa663324 aspx RES
  • 客户端应用程序立即对数据库中的更新做出反应的最佳方式是什么?

    对数据库中的数据更新做出立即反应的最佳方法是什么 我能立即想到的最简单的方法是一个线程 它检查数据库中某些数据的特定更改 并持续等待在某个预定义的时间长度内再次检查它 这个解决方案对我来说似乎是浪费和次优的 所以我想知道是否有更好的方法 我
  • 根据拦截和返回值自动重试客户端WCF调用

    是否可以拦截 WCF 调用的结果并重试该操作 例如 操作的返回值可能包含状态代码 指示我传递到原始调用的会话令牌已过期 在这种情况下 我可以检索新的会话令牌并使用新的会话令牌重试调用 是否可以通过使用 WCF 拦截返回值 检查它 然后以对操
  • JPA中如何连接多个数据库?

    我有一个 Spring Boot 应用程序 当前使用 JPA 连接到单个数据库 application properties 文件中的连接详细信息 spring datasource url jdbc oracle thin localho
  • 将自动递增值添加到只有一列的表中

    我需要创建一个基本上仅保留索引列表的表 因此 我创建了一个只有一个名为 id 的自动递增列的表 但是 我似乎无法隐式地将自动递增值添加到该表中 我知道通常当您在表中有这样一列 不仅仅是此列 时 您可以执行以下操作 插入表 col1 col2
  • where 子句中的双 %% ?

    我有一个 where 子句 如下例所示 WHERE subject LIKE chef AND dep LIKE psy 使用 1 或 2 符号有什么区别 我知道其中一个的含义 通配符 但不知道第二个添加的功能是什么 该查询可能是一个拼写错
  • 重命名猫鼬中的字段[重复]

    这个问题在这里已经有答案了 我有两个 JSON 对象 每个对象都有一个名字字段 我想将名字重命名为名称 还想使用猫鼬将现有的名字值导入到名称 Schema const mongoose require mongoose const Sche
  • 如何删除MySQL中的所有事件

    如果我想删除某个事件 我需要查询类似的内容 DROP EVENT IF EXISTS eventname 但我找不到一次性删除所有事件的命令 必须一项一项地删除 有没有一次性删除所有事件的SQL DROP EVENT IF EXISTS S
  • 数据库分区 - 水平与垂直 - 规范化和行拆分之间的区别?

    我试图理解不同的概念数据库分区这就是我的理解 水平分区 分片 将表拆分为不同的表 其中将包含初始表中的行的子集 如果按大陆拆分用户表 我见过很多这样的示例 例如北美的子表 欧洲的另一个子表 ETC 每个分区位于不同的物理位置 理解 机器 据
  • 我应该检查代码中的数据库约束还是应该捕获数据库抛出的异常

    我有一个将数据保存到名为 作业 的表中的应用程序 Jobs 表有一个名为 Name 的列 该列具有 UNIQUE 约束 名称列不是主键 我想知道在尝试保存 更新新条目之前是否应该自己检查重复条目 或者最好等待数据访问层抛出异常 如果这个应用
  • 什么是竞争条件?

    编写多线程应用程序时 最常见的问题之一是竞争条件 我向社区提出的问题是 竞赛条件是什么 你如何检测它们 你如何处理它们 最后 如何防止它们发生 当两个或多个线程可以访问共享数据并且它们试图同时更改它时 就会出现竞争条件 由于线程调度算法可以

随机推荐

  • 如何在 R 中加载 MASS 库的数据集部分?

    我正在阅读这本关于统计学习 机器学习和 R 的书 其中一个问题是 首先 加载波士顿数据集 波士顿数据集是 R 中的 MASS 库 library MASS 现在数据集包含在对象中Boston 阅读有关数据集的信息 Boston 我不明白语法
  • Spring MVC 事务控制器

    我正在尝试获取一个 Spring MVC 控制器方法 该方法已用 Transactional 注释 如果在该方法返回之前在客户端拉动网络电缆 则该方法将回滚 我似乎无法让它工作 这是一个示例我想要实现的目标 Transactional ro
  • Python 中出现“意外缩进”该怎么办?

    如何纠正 Python 中的 意外缩进 错误 Python 使用行开头的空格来确定代码块的开始和结束时间 您可能遇到的错误有 意外的缩进 这行代码的开头比前一行有更多的空格 但前一行不是子块的开头 例如 if while and for声明
  • 将形状复制到空白画布(OpenCV、Python)

    import numpy as np import cv2 blank image np zeros 40 40 3 np uint8 blank image fill 255 cv2 imshow i blank image cv2 wa
  • Facebook Feed 对话框移动网址:display=wap 问题

    我正在使用此 url 将我的移动网页定向到 Facebook 墙帖对话框页面 但是我似乎无法获取display wap上班 http m facebook com dialog feed app id
  • 为什么我不能继承 Enum 的子类?

    考虑以下代码 from enum import Enum class SubclassOfEnum Enum x 5 print SubclassOfEnum x class SubSubclassOfEnum SubclassOfEnum
  • Android,如何将CSS应用到WebView中?

    我想使用 WebView 以便向用户显示一些段落 在 XML 中 我编写了以下代码
  • RedirectToLocal() 转到不同的 url

    以下代码片段来自我的 ASP NET MVC 5 应用程序 public ActionResult Ask string id if this User Identity IsAuthenticated string retUrl Requ
  • 自定义验证不起作用 - Yii2-app-basic-Yii2

    我昨天发布了一个关于单选按钮自定义验证的问题单选按钮上的强制文本字段 我得到了答案 但是 这并不是准确的答案 但是 它解决了我的一个问题 实际上 我有 2 个单选按钮 个人 Firm 当选择具有 个人 值的单选按钮时 公司名称文本框不应是强
  • Typescript:具有不同参数的泛型数组

    考虑一个这样调用的函数 func object object1 key someKeyOfObject1 object object2 key someKeyOfObject2 它有一个数组 我想强制执行key字段保存所保存对象的键obje
  • 将 Java 代码从 Java 8 语法解析为 Java 7 语法的工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有谁知道有什么工具可以将使用 lambda 和方法引用的 Java 8 代码 在源代码级别 转换为使用匿名内部类的 Java 7 代码吗 我知道关于
  • PyQt 作为 Windows APPCRASH 崩溃

    我有一个非常短的 PyQt 程序 注意 这是一个 PythonFiddle 链接 这似乎在 Firefox 中严重崩溃 因此代码也发布在下面 它将输出打印到QTextEdit 使用代码从这个答案 当我运行代码 在 Windows 上 时 它
  • 使用 Cucumber 截图

    我刚刚学会如何使用黄瓜 你能告诉我如何完成这段代码吗 您可以使用以下代码片段实现未定义步骤的步骤定义 Then I take a screenshot do pending express the regexp above with the
  • java中如何将字符串转换为运算符

    我想转换一些String对于这样的操作员 int value 1 int valueToCompare 3 String operation lt if value operation valueToCompare some operati
  • 我需要使用多个using 语句吗?

    出于实用性考虑 这两个类都是一次性的 我了解 using 块的作用 但我不确定它可以或需要使用的所有方式 例如 这是正确的吗 using MyClass myClass new MyClass params myClass name Ste
  • Numpy:我应该使用 newaxis 还是 None?

    在 numpy 中 可以使用切片语法中的 newaxis 对象来创建长度为 1 的轴 例如 import numpy as np print np zeros 3 5 np newaxis shape shape will be 3 1 5
  • Internet Explorer 页面上的 SendMessage user32dll

    我的桌面上打开了一个 Internet Explorer 页面 网页名称为TEST 使用 user32 dll 中的 FindWindow 我可以在窗口上获取处理程序 在此页面中 我有一个名为 Go 的按钮 还有两个名为 Name 和 Su
  • 自动从 Google AppMaker 数据源导出数据

    有谁知道我们怎样才能生成报告从数据中数据源在 Google AppMaker 中自动地 例如 在凌晨 12 点生成报告 而不是每次用户需要报告时手动单击部署中的导出数据 我在上面看到过类似的东西从 Google AppMaker 导出数据但
  • 使用 CData 部分包装属性 - XML 序列化 C#

    我需要以这样的方式序列化我的对象 即我想要的属性将包裹在 CData 部分中 我希望我能做这样的事情 public class Order JsonProperty public int OrderId get set JsonProper
  • 如何在 WCF 服务中同步数据库访问?

    我以前使用过 WCF 服务 现在我有一个新项目即将开始 我仍处于设计阶段 我想知道处理以下场景的最佳方法是什么 我将让多个客户端同时连接到我的 WCF 服务 在服务上触发不同的方法 操作合约 A 触发的一些方法只是纯粹的 读取 方法 例如