【发布时间】:2017-09-27 16:04:09
【问题描述】:
我开发了一个从多个 SharePoint Online 工作流调用的 WCF Web 服务。在某些时候,可能有大约 4 个用户在很短的时间内启动多达 10 个工作流:一个工作流可能会向 Web 服务发出多达 3 个请求。不用说,在某些时候,WCF 服务会过载。当 SharePoint 工作流进行 HTTP Web 服务调用并且服务不可用时,工作流会遇到错误并在短时间内尝试重新启动工作流:这只会让事情变得更糟。
这些是今天在大约 40 分钟的“超载”期间从 Web 服务记录的一些异常:
无法从传输连接读取数据:现有 连接被远程主机强行关闭。
底层连接已关闭:发生意外错误 一个接收。
底层连接已关闭:预期的连接 to be keep alive 被服务器关闭了。
我试图寻找方法来避免 WCF Web 服务在发出多个请求时出现故障,以及寻找减少对 Web 服务的调用量的明显措施(这并不总是一种选择),我想到了以下术语:WCF 并发模式 和 限制限制。
鉴于上述情况,任何人都可以引导我找到最理想的并发模式和节流限制的正确方向吗?目前,我的 WCF 服务具有默认配置。
并发模式可以是:
单人或 多个或 可重入
Throttling Limit 选项如下所示:
<serviceThrottling maxConcurrentCalls="Integer"
maxConcurrentInstances="Integer"
maxConcurrentSessions="Integer" />
我对这个编程领域还是很陌生,发现它有点复杂,所以非常感谢任何帮助!
更新:SharePoint 系统是高度定制的,它涵盖了一个相当复杂的业务流程。 Web Service 方法多种多样,我需要很长时间才能解释每种方法的作用,但我会提到一些示例。 Web 服务用于使用开箱即用的 SharePoint 设计器操作无法(轻松或根本)完成的操作。例如:移动文档并将元数据从一个文件夹复制到另一个文件夹(在相同或不同的列表中),在列表/库之间同步信息,根据给定文件夹中的多个文档的元数据计算值,将数据调度到外部数据库中与其他组件一起使用,例如作为计划任务运行的控制台应用程序等。
Web 服务调用平均需要 2 分钟来执行并返回一个值。最快的方法大约需要 30 秒,最慢的方法大约需要 4 分钟。经常使用慢速和快速方法。
【问题讨论】:
-
您能否提供更多关于此 Web 服务正在执行哪些操作以及这些操作需要多长时间的信息?
-
@TiagoSousa 肯定是。我已根据您的要求更新了问题以提供更多信息。提前致谢!
标签: c# web-services wcf sharepoint concurrency