使用 IIS 中托管的 WCF 处理长时间运行的服务操作的正确方法是什么?

2023-11-21

我正在构建一个 WCF 服务,该服务将公开多个操作,它将在 IIS 中运行,因为它需要 HTTPS 端点。大多数操作将在几秒钟或更短的时间内完成;但是,其中一两项操作将需要 5 至 90 分钟。

该服务的主要使用者将是 ASP.NET MVC 应用程序;处理这个问题的正确方法是什么?

我应该延长超时时间并进行一些ajax 调用吗?我是否应该向数据库添加一个表,并让长时间运行的操作更新此数据库,并让 Web 界面每分钟轮询此表?我不确定普遍接受的最佳实践(如果有)是什么。


我为我的高级项目写了类似的东西,基本上是一个作业调度框架。

  1. 我选择将“作业”的“状态”存储在数据库中。
  2. 我编写了一个实现 WCF 客户端(代理)的管理器 Windows 服务
  3. 我编写了一个 WCF 服务来实现我的“工作主机”。

管理器服务将从数据库中读取队列,并将工作分发给我的所有“工作主机”。我让 Windows 服务执行此任务而不是让 UI 直接与工作主机对话的原因是因为它对整个过程提供了额外的控制级别。

我不喜欢从我的工作主机上“拔掉网络电缆”,并且再也不会从这个特定的作业中获得状态更新的想法。因此,Windows 服务使我能够持续监视 WCF 工作主机的进度,如果发生连接错误(或其他意外情况),我可以将状态更新为失败。因此,没有孤立的工作。

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

使用 IIS 中托管的 WCF 处理长时间运行的服务操作的正确方法是什么? 的相关文章

随机推荐

  • 退出 Smarty 以手动执行

    我面临的问题是 我不太确定如何在没有框架或模板引擎的情况下进行开发 我开始以这种方式编码 现在我想学习基础知识 我曾经使用过这种 MVC 模式 使用 Codeigniter 和 Smarty 作为模板引擎 我现在想做的是使用原始 php 而
  • 从远程 ssh 存储库进行 Git 克隆 - 在执行克隆命令之前更改远程网络上的机器

    我想将 git 存储库从我公司的服务器克隆到我的个人计算机 从 外部 访问这些服务器的唯一方法是通过 ssh 登录到 machine1 ssh email protected 不幸的是 git 没有安装在该特定机器上 所以像这样的 git
  • 如何提取

    标签之间的文本

    我想从 HTML 页面中提取文本p and li标签 这样我就可以开始对页面进行标记 为每个页面构建倒排索引 以便回答搜索查询 我怎样才能得到p使用 jsoup 的标签 Elements e doc select 该参数中要写入的字符串是什
  • 传递数据帧以在函数内进行变异

    我想传递一个数据框及其列 以供函数内的 dplyr 的 mutate 处理 这是一个例子 multifun lt function dataf vari mutate dataf newvar vari 2 multifun mtcars
  • 在 Haskell 中设置 argv[0]?

    有没有办法设置argv 0 在 Haskell 程序中 例如 用 ghc 编译的程序 我找到了getProgName and withProgNameSystem Environment 中的函数 但它似乎没有改变什么ps报告 Ubuntu
  • QComboBox AbstractItemView::item

    有没有办法可以增加 QComboBox 控件中列出的项目的高度 我尝试按照此处的建议进行操作在 QTDevNet 论坛中但没有运气 QComboBox QAbstractItemView item margin top 3px 我也尝试过这
  • 将 numpy 类型转换为 python

    我有一个从 pandas 生成的以下形式的字典列表 我想把它转换成json格式 list val 1 0 685 2 0 8 output json dumps list val 但是 json dumps 抛出错误 TypeError 6
  • PHP:如何使用 smtp 设置发送带有附件的电子邮件?

    我使用以下代码成功发送电子邮件 但现在我想在电子邮件中附加一个文本文件 例如 test txt 任何想法 require once Mail php from Usman lt email protected gt to Naveed lt
  • 具有 byte[] 字段作为存储过程参数的 DataTable

    我一直在重复使用这种使用 DataTable 作为存储过程参数的方法 并且效果很好 这是简化的工作代码 using dbEntities dbe new dbEntities var dt new dataTable dt Columns
  • 使用 OpenCV fitEllipse() 进行圆拟合

    使用OpenCV是否有效拟合椭圆用于圆拟合 fitEllipse 返回cv RotatedRect如何平均宽度和高度来获得拟合的圆半径 我认为使用的 有效性 cv fitEllipse拟合圆取决于您所需的拟合精度 例如 您可以在测试集上运行
  • HTMLCanvasElement 上未解决的方法 captureStream

    我的画布元素和方法有奇怪的情况captureStream 根据文档 HTMLCanvasElement 有一个方法captureStream 然而我的 Angular6 应用程序声称没有这样的方法 所以这段代码将不起作用 let canva
  • ITextSharp 解析包含图像的 HTML:它解析正确,但不会显示图像

    我正在尝试使用 ITextSharp 库从 html 生成 pdf 我能够创建 pdf 并将 html 文本转换为 pdf 文本 段落 我的问题 pdf 不显示我的图像 我的imghtml 中的元素 我所有的img我的 html 中的 ht
  • 如何 git 应用 git word diff

    我需要编辑一个混乱的提交 该提交仅更改了后续几行中的一个单词 保留其中一些更改并删除其他更改 这些变化很容易看出git diff word diff 并且以这种格式 我可以轻松地编辑帅哥来做我想做的事情 但现在我有一个像这样的文件 diff
  • 减少 App Store 中 iOS 应用程序的大小

    我正在尝试在 App Store 中提交应用程序 如果可能的话 我需要稍微减少其内存 我尝试了一种方法 我将在下面描述 来使我的应用程序更轻 但运气不佳 Details 我按照以下步骤查看导致尺寸如此之大的原因 将项目存档 分发它 节省用于
  • 简单的自定义事件

    我正在尝试学习自定义事件 并尝试创建一个 但似乎我遇到了问题 我创建了一个表单 静态类和自定义事件 我想要实现的是 当我按下按钮时 Form 将调用静态类函数 然后 func 将不时引发一个事件来报告当前状态 Form1 将侦听该事件是否引
  • 如何点击 Android 按钮然后转到 google play 应用程序

    我想知道如何制作一个 android 按钮可以点击并将用户重定向到 google play 示例 我想在用户单击我的活动中的按钮后将用户发送到 android 应用程序 https play google com store apps de
  • 更改 woocommerce 中每行的产品数量

    我正在使用 woocommerce 和 themefores 模板 默认情况下 woocommerce 每行显示 4 个产品 但我想显示 5 个 我正在使用子模板 因此我复制了 woocommerce 文件 并且里面有 content pr
  • apache-airflow 1.9 默认时区设置为非 utc

    我最近将气流版本从 Airflow 1 8 升级到 apache airflow 1 9 升级成功 并且我使用 Celery Executor 扩展了环境 一切似乎都工作正常 但 dag 和任务开始日期 执行日期等都出现在UTC 时区和计划
  • 正确终止在线程中运行的 Flask Web 应用程序

    How to properly terminate a flask web application that was launched in a separate thread I found an incomplete answer th
  • 使用 IIS 中托管的 WCF 处理长时间运行的服务操作的正确方法是什么?

    我正在构建一个 WCF 服务 该服务将公开多个操作 它将在 IIS 中运行 因为它需要 HTTPS 端点 大多数操作将在几秒钟或更短的时间内完成 但是 其中一两项操作将需要 5 至 90 分钟 该服务的主要使用者将是 ASP NET MVC