- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们目前正在审查我们的 WCF 服务设计,困扰我的一件事是在 Per-Call 和 Per-Session 服务之间做出决定。我相信我了解两者背后的概念,但我并没有真正看到按调用服务的优势。我知道使用 Per-Call 服务的动机是 WCF 服务只在调用的生命周期内持有一个服务器对象,从而限制了服务实例持有昂贵资源的时间,但对我来说使用起来要简单得多更像 OO 的 Per-Session 模型,其中您的代理对象实例始终对应于相同的服务器对象实例,并且只需手动处理任何昂贵的资源。
例如,假设我有一个带有 Add、Update、Delete 和 Select 方法的 CRUD 服务。这可以作为具有在服务器对象构造函数中实例化的数据库连接(“昂贵的资源”)的 Per-Call 服务来完成。或者,它可以是 Per-Session 服务,在每个公开的 CRUD 方法中实例化和关闭数据库连接。
对我来说,它在资源方面没有什么不同,它使编程模型更简单,因为客户端可以确保它们始终具有相同的代理服务器对象:维护调用之间可能存在的任何廉价状态,并且没有额外的参数当服务再次实例化新的服务器对象时(如 Per-Call 的情况),需要在方法上识别哪些状态数据必须由服务检索。就像使用类和对象一样,其中存在相同的资源管理问题,但我们不会为对象上的每个方法调用创建新的对象实例!
那么我在 Per-Call 模型中缺少什么?
谢谢
最佳答案
PerCall 或 PerSession 没有对错,只是优点和缺点不同。您似乎是从面向对象的角度出发的,其中 PerSession 是一个自然的选择。典型的 SOA 方法是 PerCall 方法。
在所有条件相同的情况下,权衡是性能与可扩展性。 PerSession 应该表现得更好,因为不必在后续请求中实例化对象。 PerCall 应该可以更好地扩展,因为在服务器上实例化的唯一对象正在执行实际工作。这不仅仅是“昂贵”的资源,而是在服务器上打开的所有 session 。例如在 PerSession 情况下,您可能在服务器上实例化了 1000 个对象,但实际上只有 100 个在任何时候都在调用中。但是,在 PerCall 情况下,对于 100 次调用只会实例化 100 个对象。实例化的 PerSession 对象可能会浪费资源,并可能影响在负载下处理请求的能力。
如果我的服务被公开,我也不愿意相信我的对象生命周期取决于服务消费者的心血来潮;我会担心我的服务可能会被恶意代码或错误代码关闭。
PerCall 方法的另一个潜在好处是系统可用性。回到前面的示例,如果 PerSession 服务器崩溃,那么在该服务器上拥有 session 的所有 1000 个客户端都将丢失其 session 并且无法完成其工作。在 PerCall 情况下,唯一会发生的错误是正在进行的 100 个实际请求(假设快速故障转移)。其他 900 个客户端可以在下一次调用时路由到另一台服务器。这对于 SLA 可能很重要。
关于WCF:Per-Call 和 Per-Session 服务……需要说服 Per-Call 是值得的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2542425/
我正在使用 Perltidy将我的一些旧 Perl 文件重新格式化为更接近我当前偏好的样式。我遇到了这个片段的问题: Fcntl::S_IRUSR & $mode Perltidy 坚持删除 & 后面
我正在使用 Meld 来发现两组相似的 Fortran 代码之间的差异。在许多情况下,这两个文件之间的唯一区别是自动版本号。这条线使它看起来比应该有更多的差异,并且它变得困惑。 有问题的自动版本号行类
我正在尝试让 TextToSpeech 在 Android 模拟器中朗读字母数字引用。如果我有一个字符串,例如“31NAA123”,那么我会在所有字符之间插入空格,然后将其提交给 speak 方法。它
我使用的是 Python 2.7(无法升级)。我正在尝试在我的类中存储一个函数,它可以在 ctor 中被不同的函数覆盖。该函数是一个普通的静态函数(不是成员或类方法),所以我不想在调用它时将类或对象作
我遇到了一个有趣的案例,TypeScript 编译器(使用 strictNullChecks === true)不允许我将数组过滤掉的空值传递给函数需要一个数字数组。 这是显示问题的代码示例: cla
我不认为这在目前是可能的,或者它是否是一个好主意,但这是我刚才正在考虑的事情。我使用 MSTest 对我的 C# 项目进行单元测试。在我的一项测试中,我执行以下操作: MyClass instance
我正在尝试构建一个使用 boost_serialization 和 boost_iostreams 的简单可执行文件。 #include #include #include #include
我喜欢使用 git blame 作为辅助文档形式。检查提交的原因、提交时间和提交人非常有用。 但有时特定线路的历史记录会丢失。可能发生这种情况的一些情况: 进行了更改,但随后又恢复了。 有人重新缩进文
我很难让 Agda 相信递归调用函数中的参数在结构上小于传入参数。 我已经定义了对、对列表(将有限函数表示为输入/输出对的“集合”)以及这些列表的并集,如下所示: data _x_ {l : Leve
所以我有一个相对直接的服务器堆栈,利用 SSL 卸载和 HTTP 负载平衡器。设置看起来像这样: (client) -> (SSL offload - stud) -> (balancer - hap
IT 经理不允许将 SQL Server 与正在开发的 ASP.NET 网站一起使用。当前被替换的设置是一个连接到 Microsoft Access 数据库的 php 站点。关于为什么应该使用 SQL
我正在编写一个 View ,该 View 使用带有非 UNIQUE 的列对其进行索引。但是,在我看来,我相信该列将只包含唯一值(由于 WHERE 子句中强加的条件)。 当有人根据该列查询 View (
我必须做一个 30 分钟的演示,说明为什么我们的 IT 部门应该继续使用 Ruby on Rails,而不是使用 Kohana 框架(用于 PHP)。 我从过去的 Ruby on Rails 应用程序
我希望使用 localstack模拟 elasticsearch/kinesis/dynamo。我的弹性代码需要 HTTPS 端点时遇到了麻烦。 通过 java 11/IntelliJ 测试 在所有情
我如何说服 GCC 展开一个迭代次数已知但很大的循环? 我正在编译 -O3 . 当然,实际的代码要复杂得多,但这里有一个具有相同行为的简化示例: int const constants[] = { 1
如何说服 Firefox(3.0.1,如果重要)在 HTTPS 请求中发送 If-Modified-Since header ?如果请求使用纯 HTTP 并且我的服务器尽职尽责地尊重它,它会发送 he
我是一名优秀的程序员,十分优秀!