Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用托管在IIS中的WCF处理长时间运行的服务操作的正确方法是什么?_C#_Asp.net_.net_Wcf - Fatal编程技术网

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

C# 使用托管在IIS中的WCF处理长时间运行的服务操作的正确方法是什么?,c#,asp.net,.net,wcf,C#,Asp.net,.net,Wcf,我正在构建一个WCF服务,它将公开多个操作,它将在IIS中运行,因为它需要HTTPS端点。大多数操作将在几秒钟或更短时间内执行;但是,其中一个或两个操作需要5-90分钟 此服务的主要使用者将是ASP.NET MVC应用程序;正确的处理方法是什么 我应该增加超时时间并进行一些ajax调用吗?我应该向数据库中添加一个表,让长时间运行的操作更新这个数据库,让web界面每分钟轮询一次这个表吗?我不确定这方面公认的最佳实践是什么(如果有)。看看这个 可能还有其他选择,但它们几乎是一样的。您还可以在下面的

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

此服务的主要使用者将是ASP.NET MVC应用程序;正确的处理方法是什么

我应该增加超时时间并进行一些ajax调用吗?我应该向数据库中添加一个表,让长时间运行的操作更新这个数据库,让web界面每分钟轮询一次这个表吗?我不确定这方面公认的最佳实践是什么(如果有)。

看看这个

可能还有其他选择,但它们几乎是一样的。您还可以在下面的链接中提供一些推送通知(我假设没有返回任何数据)


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

  • 我选择在数据库中存储“作业”的“状态”
  • 我编写了一个管理器windows服务,它实现了WCF客户端(代理)
  • 我编写了一个WCF服务来实现我的“工作主机”
  • 管理器服务将从数据库读取队列,并将工作分配给我的所有“工作主机”。我之所以让windows服务执行此任务,而不是让UI直接与工作主机对话,是因为它为整个过程提供了额外的控制级别


    我不喜欢从我的工作主机上“拔掉网线”,再也不会从这个特定的工作中得到状态更新。因此,windows服务使我能够不断监视WCF工作主机的进度,如果发生连接错误(或其他意外情况),我可以将状态更新为failed。因此,没有孤立的作业。

    如果长时间运行的操作没有传输数据,那么您可能应该将其分解为异步处理器。因此,客户端会请求启动作业,然后定期检查以获得响应或消息“稍后检查”。@Noah,长时间运行的操作不会返回太多数据,直到它们完成,如果你不传输数据,你肯定不应该让http连接打开那么长时间,所以最好把它断开@Jim提供了一个很好的例子。你有没有理由推出自己的经理而不是使用MSMQ?不特别是。我从未使用过MSMQ,正如我所说的,这只是学校/合作社的一个项目。我相信有很多方法可以改进设计,但对于我所需要的,它已经足够简单了。该应用程序的主要目的是处理WCF,尽管MSMQ会很有用,但它并不是重点。在您的设计中,您的每个“工作主机”都会向正在寻找工作的经理查询吗?或者经理会在需要的时候给每一个工作打电话吗?这些“工作主机”只是愚蠢的工作人员。它们有一组实现,根据接收到的服务调用来调用它们。他们不与任何其他人进行任何交流。当经理轮询更新时,他们只响应状态更新,等等。。。