WCF 中的并发如何工作?

2024-01-20

我是WCF和SOA的新手。我刚刚开始研究这些,我有一个理论上的疑问:

客户端 A 已调用服务,并且逻辑当前正在服务器上执行。当逻辑正在执行时,来自客户端 B 的另一个调用会进入同一服务。

此时客户端 A 正在执行的逻辑发生了什么?该服务如何设法满足这两个请求?


您的问题的答案取决于您使用的绑定。有两个设置控制此行为:InstanceContextMode 和 ConcurrencyMode。这两个设置都是在 ServiceBehaviorAttribute 中设置的。

InstanceContextMode 控制服务的实例化方式。它具有以下值:

  • PerCall - 每次调用服务时都会创建新的服务实例。这是在不使用传输会话、可靠会话或安全会话 => BasicHttpBinding、WebHttpBinding 的绑定上公开的服务的默认行为。

  • PerSession - 每次从新的代理实例调用服务时,都会创建新的服务实例。来自同一代理的任何后续调用都由同一服务实例(实例位于服务器上)处理。默认情况下,后续调用必须在 10 分钟内(receiveTimeout)完成,否则服务实例将被释放。这是使用传输会话、可靠会话或安全会话的绑定上公开的服务的默认默认行为 => WSHttpBinding(默认设置使用安全会话)、NetTcpBinding、NetNamedPipeBinding。

  • 单一 - 仅存在一个服务实例并处理所有调用。该服务实例可以在主机启动或第一次调用服务时创建。

现在您知道如何创建实例了。第二个设置 ConcurrencyMode 控制有多少并发线程可以访问单个实例。每个请求始终在单独的线程中处理。

  • 单线程——只有一个线程可以访问服务实例。这是默认行为。

  • 可重入 - 一个线程可以访问服务,但它可以释放锁并允许其他线程使用该实例,而第一个线程将被阻塞。这是在回调场景中使用的。

  • 多个 - 多个线程可以访问服务实例。

现在您知道如何并发使用实例了。让我们看看一些组合:

  • PerCall 实例化 + 单并发 - 典型的无状态场景。允许多个并发调用。

  • PerCall 实例化 + 多个并发 - 没有意义。它的行为仍然像单一并发。

  • PerSession 实例化 + 单并发 - 允许多个并发调用,但只能同时处理来自每个代理的单个调用。其他呼叫正在排队。

  • PerSession 实例化 + 多个并发 - 允许多个并发调用。来自每个代理的多个调用可以同时访问同一个实例。您必须手动同步对服务实例中共享字段的访问。

  • 单实例+单并发——一次只能处理单个请求。其他请求排队(默认超时 30 秒)。

  • 单实例+多并发——允许多个并发调用。所有调用同时访问同一实例。您必须手动同步对服务实例中共享字段的访问。

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

WCF 中的并发如何工作? 的相关文章

  • 使用 Crypto++ 和 .NET 的 CFB 模式下的 TripleDES

    我正在尝试使用 TripleDES 使用 C 应用程序获得相同的结果 该应用程序具有Crypto https www cryptopp com 和 NET应用程序使用三重DESCryptoServiceProvider https msdn
  • 当客户端连接到“localhost”上的服务时,为什么 System.Net.ServicePoint.ConnectionLimit 使用“7FFFFFFF”(Int32.MaxValue/2147483647)?

    为什么使用 System Net ServicePoint ConnectionLimit 7FFFFFFF Int32 MaxValue 2147483647 当客户端连接到服务时 本地主机 而如果服务在远程计算机上运行 它决定使用 2
  • .NET Framework 中的语言互操作性(基本概念)是什么?

    我正在阅读 NET框架 https en wikipedia org wiki NET Framework维基百科的文章 第一段描述了这个框架的一般概念 它说 它包括一个大型库 并提供跨多种编程语言的语言互操作性 每种语言可以使用用其他语言
  • 无法找到 .NET Core 项目

    我正在关注 c 的 brackeys 教程here https www youtube com watch v N775KsWQVkw 但在 7 55 时 我弹出一条消息 无法找到 NET Core 项目 未生成资产 我已经做了布雷基在那一
  • 使用 TCP 套接字在本地代理视频

    我一直对向媒体浏览器添加对视频播客的支持非常感兴趣 我希望用户能够浏览可用的视频播客并从互联网上流式传输它们 这真的很容易 因为媒体播放器等将愉快地播放存在于云中的文件 问题是我想在本地缓存这些文件 因此同一集的后续观看将不涉及流式传输 而
  • 等待运算符错误

    我的代码有问题 我怎么解决这个问题 这个问题出现在await操作符中 public MyModel HttpClient client new HttpClient HttpResponseMessage response await cl
  • 带有嵌入 Flash 视频的 PDF 示例?

    有谁知道我在哪里可以查看嵌入 Flash 视频的 PDF 示例 我知道问这个问题很愚蠢 因为你会认为任何面向技术的用户都应该能够使用谷歌找到一个 但我真的找不到 我的另一个问题是 使用 C 中的 API 将 Flash 视频嵌入 PDF 文
  • 如何生成wcf服务库项目的wsdl文件?

    我的解决方案中有一些 Wcf 服务库项目 不是 Wcf 服务应用程序 我必须将项目的 wsdl 文件提供给将使用这些服务的同事 我怎样才能做到这一点 提前致谢 您可以使用WCF服务主机 http msdn microsoft com en
  • 使用生成的 Golang DLL 返回字符串或 *C.Char

    我一直在努力追随z505 goDLL https github com z505 goDLL回购并遇到了一个大问题 该方法无法返回字符串 我无法读取结果的输出变量 这是我到目前为止使用的代码 Go 完整代码https play golang
  • 将集合项复制到 .NET 中的另一个集合

    在 NET VB 中 如何获取一个集合中的所有项目 并将它们添加到第二个集合中 而不丢失第二个集合中预先存在的项目 我正在寻找比这更有效的东西 For Each item As Host In hostCollection1 hostCol
  • 如何更改 Settings.settings 值的值

    我有一个简单的控制台应用程序 每天运行 由 Windows 任务计划程序调用 并且取决于每次应用程序运行时递增的值 为了保留这个值 我选择使用 Settings Settings 文件 因此 我有一个名为 RunNumber 和 Scope
  • 使用 HttpClient 从 webapi 消费 xml

    我使用 WebClient 从 Restfull 服务 net web api 获取 Xml 对象 一切都运行良好 using WebClient client new WebClient client Encoding UTF8Encod
  • 160 位 SHA1 哈希值的前 32 位是否可以替代 CRC32 哈希值?

    我正在开发一个 NET 3 5 项目 我需要一个 32 位哈希值 NET 加密类中似乎没有任何方法返回 32 位哈希 MD5 是 128 位 SHA1 是 160 位等 我实现了一个 CRC32 类 但我发现现有的 SHA1 和 MD5 哈
  • 在Python3.6中调用C#代码

    由于完全不了解 C 编码 我希望在我的 python 代码中调用 C 函数 我知道有很多关于同一问题的问答 但由于一些奇怪的原因 我无法从示例 python 模块导入简单的 c 类库 以下是我所做的事情 C 类库设置 我使用的是 VS 20
  • .NET PInvoke 可以从用户指定的目录动态加载本机 dll 吗?

    我有一个 NET 应用程序 需要加载一个本机库 其位置由用户指定 PInvoke 看起来只会从全局搜索路径 或编译时指定的路径 加载 最好的方法是创建一个在运行时调用 LoadLibrary 的 C CLI 程序集吗 C CLI 会比 C
  • .net 中的计时器合并

    Windows 7 引入了计时器合并 提高了能源效率 哪些托管 API 公开了计时器容差 似乎利用此功能的唯一方法是 p invoke设置等待定时器 http msdn microsoft com en us library windows
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 将 System.Windows.Forms.Keys 序列转换为 Char

    有没有办法转换由 Keys 枚举表示的击键序列 即System Windows Forms Keys 在一个字符中 例如 Keys Oem4进而Keys A产生 char 它一定存在于 WinAPI 中的某个地方 因为当我在文本框中按下按键
  • 如何在.NET Core上直接调用F#编译器?

    UPD 我想直接从 NET Core SDK 调用 F 编译器 即 fsc 我了解 dotnet build co 但当我只需要编译一个简单的问题时 即 fsc file fs 就足够的情况下 我不想涉及它们 我尝试在 NET Core S
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向

随机推荐

  • 使用 RSpec 测试 searchkick

    我想创建用于在我的实践管理应用程序中搜索患者的功能规范 到目前为止 我已经在网上搜索并遵循了以下建议的解决方案 http bitsandbit es post 11295134047 unit testing with tire and e
  • 模板参数推导失败

    我正在尝试使用标签和enable if对模板参数实施约束 这是代码 include
  • iOS7 SKScene如何让精灵从屏幕边缘反弹?

    我正在开发一款球在 iPad 屏幕内弹跳的游戏 类似于乒乓球游戏 我看到 SKScene 的 SKPhysicsWorld 具有重力属性 并且还控制对象如何相互碰撞 有什么方法可以自动检测精灵的边缘是否与屏幕边缘发生碰撞 以便它可以反弹 或
  • WPF 应用程序转换为 ASP

    有没有办法把WPF应用程序变成ASP应用程序 或者它们是完全不相关的技术 XAML 格式让我想起了 HTML 似乎有一种方法 WPF 应用程序是 Windows 应用程序 而 ASP Net 应用程序是 Web 应用程序 这两个平台存在巨大
  • 无法使用 Namecheap 通过 Firebase 验证自定义域

    当我按照说明将 firebase 提供的文本记录 1 插入到我的 NameCheap 中后 不断弹出此错误消息 当前状态 抱歉 我们无法验证您的域名 该消息已经出现大约 5 天了 我捕获了 firebase 和 namecheap 设置的屏
  • H2数据库中auto_increment字段自增32?

    我有这个简单的表 仅供测试 create table table key int not null primary key auto increment name varchar 30 然后我执行以下请求 insert into table
  • 数据库恢复到特定状态以进行测试

    我们使用 Oracle 或 postgres 数据库和应用程序服务器来执行集成测试 为了将每个测试与另一个测试隔离 在每个测试之前都会删除并重新创建数据库模式 如您所见 这是一个耗时的过程 该应用程序使用 100 多个表 我们正在考虑编写自
  • C语言中的“静态”是什么意思?

    我见过这个词static在C代码中的不同地方使用 这是否像 C 中的静态函数 类 其中实现在对象之间共享 函数内的静态变量在调用之间保留其值 静态全局变量或函数仅在声明它的文件中 可见 如果你是新手 1 是一个比较陌生的话题 所以这里有一个
  • 为什么 document.addEventListener('load', function) 在 Greasemonkey 脚本中不起作用?

    它没有给出错误 我放了一个console log loaded userscript wifi autologin the console log有效 但 document addEventListener 的预期效果没有发生 在进行更多调
  • 如何使用 Visual Studio Code git Push 到不同的分支?

    我意识到在 VSCode 中提交后 有一个 推送 菜单选项可以将提交推送到默认分支 然而 我经常需要将它推送到不同的分支 有没有办法做到这一点或运行git push progress origin DEFAULT BRANCH OTHER
  • 如何找出哪个缺失的 DLL 导致我的 .NET 应用程序在启动时崩溃?

    当对第 3 方程序集的依赖项添加到典型的 NET 应用程序时 很容易忘记将它们添加到安装程序中 这个问题往往只有在应用程序安装后才会显现出来 并且以启动时崩溃的形式出现 几乎没有可用的有用信息 找出需要将哪些程序集添加到安装程序的最佳工具和
  • 头盔快递 ERR_BLOCKED_BY_RESPONSE.NotSameOrigin 200

    请我需要帮助 我检查了所有谷歌 但没有得到打开我的问题的真正答案 我想使用头盔来保护我的 Express 服务器 但是当我使用它时 我收到此错误 ERR BLOCKED BY RESPONSE NotSameOrigin 200 从数据库加
  • 使用 Matplotlib 创建 CSV 数据的实时绘图

    我正在尝试使用 Matplotlib 来可视化一些测量结果 测量通常持续约 24 小时 并将在 csv 中包含约 3 万行数据 我一直在努力让我的情节真正动画化 我可以执行代码 它将显示截至当前时间点的快照 但不会显示其他内容 当我尝试自动
  • 如何让 GridView 在添加项目时调整其高度

    我试图在 GridView 中显示一个带有复选框的动态增长的字符串列表 该复选框本身位于 TableLayout 中 我可以连续显示 复选框 字符串 当我让用户在 GridView 中动态添加新字符串时 就会出现问题 我创建了一个接收字符串
  • 如何使用 expo React Native 调整照片大小

    给定用户设备上照片的 uri 文件 和内容 我如何调整照片大小 我正在运行一个托管的博览会应用程序 因此理想情况下我们能够在不分离的情况下执行此操作 这可以通过世博会来完成图像操纵器 https docs expo io versions
  • GoogleMobileAds 的未定义符号问题

    我正在构建动态框架 在其中导入 GoogleMobileAds 框架 我没有将其链接为二进制 我只是将其导入到类代码中 同时将框架保留在项目路径上 而不在构建阶段的 链接二进制文件 中链接它 import GoogleMobileAds 我
  • Heroku 无法满足tensorflow==2.3.0 的要求

    我正在尝试将 Flask 应用程序部署到 Heroku 为了使应用程序能够正确使用 Keras Tensorflow 必须至少为 2 2 版本 所以我做了pipenv install tensorflow 就像我对所有依赖项所做的那样 它将
  • Opencv:从许可证中裁剪文本区域

    我有一张驾驶执照的下图 我想提取有关驾驶执照 姓名 出生日期等的信息 我的思考过程是找到一种方法将它们逐行分组 并裁剪出包含姓名的单个矩形 eng 和 ara 的许可证等 但我却惨遭失败 import cv2 import os impor
  • 使用opengl进行真正的等角投影

    有没有简单的方法进行等角投影 I mean 真正的等角投影 http en wikipedia org wiki Isometric projection 不是一般的正交投影 只有当单位 X Y 和 Z 向量的投影长度相等且它们之间的角度恰
  • WCF 中的并发如何工作?

    我是WCF和SOA的新手 我刚刚开始研究这些 我有一个理论上的疑问 客户端 A 已调用服务 并且逻辑当前正在服务器上执行 当逻辑正在执行时 来自客户端 B 的另一个调用会进入同一服务 此时客户端 A 正在执行的逻辑发生了什么 该服务如何设法