我知道所有地方都有类似的问题,但我找不到与我所追求的有直接关系的问题。
我有一个用户上传数据文件的网站,然后该文件被转换并导入到SQL中。该文件的大小可能高达50mb,有时这个过程可能需要30分钟甚至更长时间。
我意识到我需要将实际工作转移到另一个进程,并在网页上轮询该进程。我想知道最好的方法是什么?作为一名网络开发人员,我发现所有这些新的Windows服务有点令人困惑,我只是想在某个地方开始。
所以:
澄清
数据被导入到sql中,没有文件分发。
如果出现故障,绝对必须向用户报告。从异步任务开始的那一刻起,网页将轮询每个,比如5秒,以获得导入的“状态”。一旦完成,另一个响应将告诉页面停止轮询状态更新。
查询最终决定
好吧,我想,似乎Windows服务是最好的主意。至于如何让它工作,似乎'把文件放在那里等待服务拿起'想法是普遍接受的方式,有没有办法我可以启动服务运行的进程,没有它必须经常检查数据库表/文件夹?正如我之前所说,我对Windows服务没有任何经验 - 我想知道我是否在服务中放置了一个公共方法,我能以某种方式调用它吗?答案 0 :(得分:3)
嗯......
var thread = new Thread(() => {
// your action
});
thread.Start();
但你会遇到问题:
将所有内容存储在sql(特别是文件......)中并不总是一个好主意。如果你想让文件可供多个服务器使用,为什么不通过ftp分发它们??
我相信你的整个概念有点混乱(假设这样),如果你详细说明并向我们提供有关你的意图的更多信息,它可能会有所帮助!
修改强>
我能做/我应该这样做吗? 有Windows服务?如果是这样,怎么样?
你可以:)我建议你创建一个简单的控制台程序,并用srvany
和sc
转换它。你可以粗略地了解如何here(注意:在=
之后插入空白......这是一个愚蠢的陷阱)
术语should
是相对的,因为您没有回答最重要的问题
如果记录持久存储到数据库,告诉消费者文件
test.img
应该保留,但是您的服务没有捕获它或者还没有转换它,该怎么办?
所以...接下来
我应该使用WCF吗?如果这在IIS下运行,我是否会遇到aspnet_wp.exe回收问题并将我的进程超时?
您可能可以创建一个WCF服务,它接收一些二进制数据,然后将其存储到数据库中。这个请求可能是异步的。是。但是为了什么?
再一次: 请让我们更深入地了解您的工作流程:您究竟想要实现的目标是什么?您有哪些“环境条件”(例如,应用程序A轮询数据库并期望表x中引用的文件记录被保留)...
修改强>
所以你想导入一个.csv
- 文件。这改变了一切:)
但我不会建议你使用wcf-service(可以是一种用法:例如.wcf-service,它有一个插入单行的方法,然后你的迭代通过该文件将在另一个应用程序中实现...但不是那么好。
我建议遵循:
首先要做你webapp中的所有事情(就像你已经做过的那样),而是使用某种批量插入并在数据库上进行转换/逻辑。
如果你有某种瓶颈,我会建议你做一些像小工作的服务,例如:
webapp将上传文件并在作业表中插入一行。工作服务是连续轮询表/或通过webapp获取wcf的信息(嘿,嘿,最后在你的场景中对WCF的一些用法... :)然后做导入工作,写完成 - 表格注释/或将工作状态设置为完成...
但这有点矫枉过正:)
答案 1 :(得分:1)
请查看我的以下评论是否有助于您解决问题:
•我可以/我应该使用Windows服务吗?如果是这样,怎么样?
是的,您可以使用Windows服务执行此操作。我认为这就是你应该这样做的方式。您可以实施自己的服务来处理您的请求,也可以使用开源代码Job Proccessor
基本上这个想法是......
•我应该使用WCF吗?如果这在IIS下运行,我是否会遇到aspnet_wp.exe回收问题并将我的进程超时?
你不应该为此目的使用WCF。