WCF:Per-Call 和 Per-Session 服务...需要说服 Per-Call 是值得的

2024-05-06

我们目前正在审查 WCF 服务设计,困扰我的一件事是 Per-Call 和 Per-Session 服务之间的决定。我相信我理解两者背后的概念,但我并没有真正看到按呼叫服务的优势。我知道使用 Per-Call 服务的动机是 WCF 服务仅在调用生命周期内保存服务器对象,从而限制服务实例保存昂贵资源的时间,但对我来说,它使用起来更简单更像面向对象的每会话模型,其中代理对象实例始终对应于同一服务器对象实例,并且只需手动处理任何昂贵的资源。

例如,假设我有一个 CRUD 服务,其中包含添加、更新、删除、选择方法。这可以作为每次调用服务来完成,并在服务器对象构造函数中实例化数据库连接(“昂贵的资源”)。或者,它可以是每会话服务,在公开的每个 CRUD 方法中实例化和关闭数据库连接。

对我来说,这在资源方面没有什么不同,它使编程模型更简单,因为客户端可以放心,他们的代理始终具有相同的服务器对象:维护调用之间可能存在的任何廉价状态,并且没有额外的参数方法上需要确定服务再次实例化新服务器对象时必须检索哪些状态数据(如 Per-Call 的情况)。就像使用类和对象一样,其中存在相同的资源管理问题,但我们不会为对象上的每个方法调用创建新的对象实例!

那么 Per-Call 模型缺少什么?

Thanks


就这一点而言,没有对错之分PerCall or PerSession只是不同的优点和缺点。您似乎是从面向对象的角度接近的,其中PerSession是天作之合。一个典型的SOA方法将是PerCall方法。

在所有条件相同的情况下,需要权衡性能与可扩展性。PerSession应该表现得更好,因为该对象不必在后续请求中实例化。PerCall应该可以更好地扩展,因为在服务器上实例化的唯一对象正在执行实际工作。它不仅仅是“昂贵”的资源,它还包括服务器上打开的所有会话。例如在一个PerSession在这种情况下,您可能在服务器上实例化了 1000 个对象,但任何时候实际上只有 100 个对象在调用。然而,在一个PerCall在这种情况下,100 次调用只会实例化 100 个对象。实例化PerSession对象可能会浪费资源,并且可能会影响在负载下处理请求的能力。

如果我的服务被公开暴露,我也不愿意相信我的对象生命周期取决于服务消费者的突发奇想;我担心我的服务可能会被恶意或有错误的代码所破坏。

另一个潜在的好处PerCall方法是系统可用性。回到前面的例子,如果PerSession如果服务器崩溃,那么在该服务器上拥有会话的所有 1000 个客户端都将丢失会话并且无法完成其工作。在里面PerCall在这种情况下,唯一会发生的错误是针对正在进行的 100 个实际请求(假设快速故障转移)。其他 900 个客户端可以在下次呼叫时路由到另一台服务器。这对于 SLA 可能很重要。

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

WCF:Per-Call 和 Per-Session 服务...需要说服 Per-Call 是值得的 的相关文章

  • 在方法/数据成员中向 WCF 添加限制

    我是 WCF 新手 我尝试对数据成员添加限制 例如在这个方法中 DataMember public string StringValue get return stringValue set stringValue value 我想设置最大
  • “从另一方收到不安全或不正确安全的故障”

    我越来越 从另一方收到不安全或不正确安全的故障 有关故障代码和详细信息 请参阅内部故障异常 我已经在客户端完成了此操作 并且在控制台应用程序中完成了相同的操作 但是出现的错误可能是某些冲突 我已经检查过app config以及 Code i
  • Task.Delay 值得取消吗?

    我最近使用取消模式重新实现了一大堆异步 WCF 服务方法 我在很多地方都看到过这种模式的描述 您可以在其中等待Task WhenAny在已启动的任务和 Task Delay 上 当然 现有任务是不可取消的 但这有望在以后的版本中得到解决 就
  • 禁用“应用程序已停止工作”窗口

    我们获得了 NET WCF 服务 理想情况下该服务应具有 100 的正常运行时间 但有时我们的应用程序中会出现由第三方数据库连接组件引起的内存泄漏问题 我们配置 nnCron 来监视进程是否存在 并且当该服务的进程退出时 它应该再次启动它
  • 我是否需要在 WCF DataContract 中公开构造函数才能使其在客户端上的对象实例化期间工作?

    我在 WCF 服务中有一个类 我们称之为A A是一个数据协定 其中包含另一个自定义对象的集合作为其数据成员之一B 为了避免客户端出现空引用问题 我实例化了BList在构造函数中像这样 DataContract public class A
  • WCF 版本控制枚举

    我开始编写一些需要向前兼容和版本控制的 WCF 数据协定 我一直在阅读 MSDN 文章here http msdn microsoft com en us library ms733832 aspx 并且想知道是否有人对有关枚举的第 14
  • WCF 包装代理客户端

    我的项目中有许多在客户端应用程序中使用的 Web 方法 我不想写这样的代码 using ServiceClient sc new ServiceClient Invoke service methods sc Method1 相反 我想写
  • 如何启动WCF语音聊天应用程序?

    我正在寻找开发 WCF 语音聊天应用程序 我想使用 WCF 服务来构建应用程序 Invite gt OK lt gt Audio flow lt
  • 使用 Protobuf-net 和 Monotouch for IOS 通过 WCF 序列化 IEnumerable 槽

    我正在尝试在 iOS 的 Monotouch Monodevelop 上编写 WCF 服务 我为可序列化对象使用了标准属性 例如 DataMember DataContract 为我的接口使用了 ServiceContract Operat
  • WCF vs ASPX webmethods vs ASMX webmethods

    目的是创建一组人们可以重用的 Web 服务 这些服务主要与创建 检索和处理数据的后端数据库交互 我们希望公开服务 以便人们可以用来创建数据混搭和其他应用程序 最终用户是可以位于我们域内或域外的网页 对于域外的页面 我们计划发布配置为检索和显
  • 在 WCF 中序列化 IDictionary

    我们有一个现有的应用程序 其中一个 DTO 对象的属性类型为IDictionary
  • WCF 服务契约将被 XML 和 Json 序列化

    我如何创建要加入的服务合同XmlSerializer 格式也WebMessageFormat Json在 WCF RESTful 服务中 我需要的是从 ASP Net 1 1 的代码后面调用 CallADSWebMethod 操作契约 该契
  • 通过VBScript调用WCF服务

    有一个WCF服务 配置如下
  • 将大文件返回为拆分 zip 文件、流或字节数组 WCF 的最佳方法

    我已经将 zip 文件流返回给客户端 如下所示MessageContract MessageContract public class ExportResult C MessageHeader public PackedStudy C Pa
  • “无法连接到远程服务器”

    我可以从 Windows 窗体程序调用第三方供应商的 Web 服务 当我尝试从 WCF Web 服务调用相同的 Web 服务和 Web 方法以及相同的 URL 时 出现以下错误 ExportValuationPolicyNumber Exc
  • 如何为WCF服务添加跨域支持

    我试图允许从托管在 localhost 80 的 javascript 应用程序向托管在不同端口的 WCF RStful 服务发出 POST 请求 但不知何故它不起作用 我尝试将自定义属性添加到标头 以及以编程方式将其添加到我的服务中JSO
  • 使用 netMSMQ 绑定进行有序交付

    使用 WCF netMSMQbinding 时是否可以保证有序交付 我们将一个插入命令后跟多个更新命令放在同一个队列上 有时其中一个更新会击败插入命令 添加了广泛的日志记录后 很明显它们正在以正确的顺序添加到队列中 并以不同的顺序进行处理
  • 如何在没有 ASP.NET 的情况下从 json 客户端调用 .NET AuthenticationService

    我有一个 WCF 4 服务 位于安全子文件夹中 在客户端使用 NET AuthenticationService 使用表单身份验证进行身份验证后可以访问该服务 此 WCF 服务适用于通过 json 进行通信的移动应用程序客户端 但不是 AS
  • IIS 7.5 托管的 WCF 服务仅针对大型请求抛出 EndpointNotFoundException 和 404

    我有一个 WCF REST 服务托管在 IIS 7 5 Windows 2008 R2 上 该服务按预期工作 除非客户端尝试发送大于 25 MB 的消息 具体来说 当发送大小约为 25 MB 的消息时 服务会正确接收并处理消息 而当发送大小
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe

随机推荐

  • 在 NodeJS 中处理长时间运行的进程?

    我看过一些较旧的帖子涉及这个主题 但我想知道当前的现代方法是什么 用例是 1 假设您想要在视频文件上执行长时间运行的任务 例如 60 秒长 例如jspm install这最多可能需要 60 秒 2 不能对任务进行细分 其他要求包括 需要知道
  • 使用 Vue.JS 时,我们是否被迫在 CSP 中使用“unsafe-inline”?

    有没有办法让 Vue js 与 CSP 正常配合 当我运行我的spa应用程序 由npm run generate使用 Nuxt js 我会收到几个警告 例如 拒绝应用内联样式 因为它违反了以下规定 内容安全策略指令 style src se
  • UICollectionView 访问错误 -> UICollectionViewData _setLayoutAttributes:GlobalIndex:

    我使用 UICollectionView 来显示大量图像 其中一批为 32 个 每次到达集合视图的末尾时 我都会加载另一批 32 个图像 并调整 collectionView contentsize width 的大小以接受新项目 通过使用
  • 进度对话框未显示在屏幕上

    我根据亲爱的 Mayank answer 编辑了我的代码 但它没有显示在方法开始之前在 displayMsg 方法中作为输入发送的任何消息 我应该说 MethodTest 是通过 nfc 和 onNewIntent Intent Inten
  • 如何在 Web Api 中将对象作为参数传递

    我想在我的 web api GET 和 POST 方法中将对象作为参数传递 我的代码是 HttpGet Route mytest list model public IHttpActionResult GetAllTypes TestMod
  • 在java中使用共享密钥加密/解密?

    我有客户令牌 我正在从一个 Web 应用程序 如 app1 发送到另一个 Web 应用程序 如 app2 我想加密客户令牌 在 app1 上 并使用在 app1 和 app2 上共享的密钥在 app2 上对其进行解密 我不知道如何开始 这将
  • 如何跟踪用户在我的 Android 应用程序上花费了多少时间?

    我想跟踪用户在我的 Android 应用程序上花费了多少时间 当用户在应用程序上处于活动状态时 我可以获取以小时为单位的时间吗 它会自动跟踪 Note 应用程序不在 Google Play 上 此代码将帮助您获取应用程序使用时间 long
  • 在 Inno Setup 中实现脚本常量时出现“预期标识符”或“原型无效”

    因此 鉴于此功能 我在GetRoot ROOTPage Values 0 线 我希望它告诉我ROOTPage没有定义 const DefaultRoot C IAmGRoot Var ROOTPage TInputQueryWizardPa
  • Java无限信号量

    想知道如何not使用信号量限制连接 或任何东西 所以你可能会想 这听起来很愚蠢 但是 它稍微简化了我的代码 因为它让我可以统一处理有限和无限的情况 请注意 我并不是在寻找有关如何编写类似内容的建议 if limited semaphore
  • K&R 之后用什么书来学习纯 C 编程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JS jQuery - 检查值是否在数组中

    我更喜欢 PHP 而不是 JS 我认为我的问题更多是语法问题 我有一个小的 jQuery 来 验证 并检查输入值 它适用于单个单词 但我需要数组 我正在使用inArray jQuery 的 var ar value1 value2 valu
  • Android Vector Drawable 不支持。如何修复它?

    尝试从 AndroidStudio 2 2 Ubuntu 14 04 的本地 svg 文件生成矢量资源时出现此错误 Could not generate a preview In icon svg ERROR line 6
  • 在Application_Start中访问ninject内核

    我正在使用 Ninject 和随 nuget 安装的 MVC3 扩展 我的内核设置代码位于 App Start NinjectMVC3 cs 文件中 控制器中的一切都运行良好 但我无法弄清楚如何 正确 绑定 Global asax cs M
  • 将 JS 文件导入 Typescript

    我正在考虑转向 Typescript 目前正在考虑慢慢地 如果可能的话 逐个文件地执行此操作 现在我目前拥有的系统是用 Webpack 构建的 我想继续这个来构建我的整个包 我有一个用于定义的 d ts 文件 但我需要继续导入当前引发错误的
  • PHP 错误:php_network_getaddresses:getaddrinfo 失败:(从其他站点获取信息时。)

    尝试从外部源获取信息时 我收到以下错误 Warning php network getaddresses getaddrinfo 失败 第 行名称解析暂时失败 昨天一切都很好 那么这个脚本发生了什么 它不起作用并给我上面的错误 有什么解决方
  • 将 sudo 与 Python 脚本结合使用

    我正在尝试编写一个小脚本来在每次执行脚本时安装 VirtualBox 共享文件夹 我想用Python 来做这件事 因为我正在尝试学习它来编写脚本 问题是我需要特权才能启动挂载命令 我可以将脚本作为 sudo 运行 但我更喜欢它自己创建 su
  • Powershell“Set-PSDebug -Trace 2”导致意外结果

    我遇到一个奇怪的问题 在设置 Set PSDebug Trace 2 时出现不同的行为 我追踪到 switch 语句未正确执行 并且能够在 Powershell V3 上重现它 但不能在 Powershell V2 或 Powershell
  • 当存在多个字段分隔符时使用 AWK 忽略字段内的逗号

    我想像下面这样解析 CSV 记录awk or gawk 这些字段以逗号分隔 但最后一个字段 6 很特殊 因为它确实由子字段组成 这些子字段由 作为字段分隔符 或者 准确地说 分隔 这本身不是问题 我可以使用awk F 设置替代字段分隔符 但
  • 在所有布局方法之后调用哪个 Activity 方法?

    我需要做一些事情Activity调用所有布局方法后 所有Views 已就位并且Activity已准备好显示 哪种方法可以做到这一点 如果你想获得视图的宽度或其他东西 这应该有效 将其添加到您的 Activity 的 onCreate 中 V
  • WCF:Per-Call 和 Per-Session 服务...需要说服 Per-Call 是值得的

    我们目前正在审查 WCF 服务设计 困扰我的一件事是 Per Call 和 Per Session 服务之间的决定 我相信我理解两者背后的概念 但我并没有真正看到按呼叫服务的优势 我知道使用 Per Call 服务的动机是 WCF 服务仅在