Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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/30.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# 将图像处理分发到多个Windows服务器,文件锁定_C#_Asp.net_Web Services_Windows Server 2008_Locking - Fatal编程技术网

C# 将图像处理分发到多个Windows服务器,文件锁定

C# 将图像处理分发到多个Windows服务器,文件锁定,c#,asp.net,web-services,windows-server-2008,locking,C#,Asp.net,Web Services,Windows Server 2008,Locking,我需要把大的图像文件处理成小的图像文件。我希望将工作分配给许多“从属”服务器,而不是将此任务分配给我的主服务器。我正在使用Windows Server 2005/2008、C#和ASP.NET。我有很多web应用程序开发经验,但没有开发过分布式系统。我有一个想法,这可以设计如下: 1) 文件将放置在共享网络驱动器中 2) 从属服务器将定期轮询驱动器以获取新内容 3) 从属服务器会将新找到的文件重命名为未处理的_appIDXXXX_jidxxx_photoidXXXXX.tif,并开始处理该文件

我需要把大的图像文件处理成小的图像文件。我希望将工作分配给许多“从属”服务器,而不是将此任务分配给我的主服务器。我正在使用Windows Server 2005/2008、C#和ASP.NET。我有很多web应用程序开发经验,但没有开发过分布式系统。我有一个想法,这可以设计如下:

1) 文件将放置在共享网络驱动器中

2) 从属服务器将定期轮询驱动器以获取新内容

3) 从属服务器会将新找到的文件重命名为未处理的_appIDXXXX_jidxxx_photoidXXXXX.tif,并开始处理该文件

4) 其他从属服务器将通过检查文件名来避免尝试处理正在处理的文件,即,如果某个文件名为“未处理”,它们将不会尝试处理

我想知道一些事情:

1) 两个从属服务器试图立即“抓取”并重命名文件时会出现问题,还是Windows Server会自动锁定该文件

2) 您认为通知处理新内容的最佳机制应该是什么?一个简单的想法是在每个从系统上编写一个基本的aspx页面,并让它在计时器上运行。更好的办法可能是编写一个利用SystemFileWatcher的Windows服务,并在每个从属系统上运行。第三个想法是让中央服务器以某种方式向给定的从属服务器发送指令以尝试处理作业,但我不知道除了让主服务器通过HTTP传递消息这一非常老练的方法之外,还有什么方法可以调用这种通信

我非常感谢您提供的任何指导

干杯,
-KF

如果你不想一路带着一个。你应该考虑找一个工作经理来安排工作。这样,当服务器可以执行工作时,它会要求作业管理器执行新的工作。然后,它可以告诉作业经理它已经完成,作业经理可以在整个作业的工作完成时通知您的“客户”。这样,注册工作就很容易,并且知道工作已经完成,作业经理可以将工作分配出去,而无需担心文件重命名时的竞争条件。:)

好主意,谢谢。对于“客户”应如何与“工作经理”沟通,您是否有任何建议的沟通机制?这样做的一种方法是,在确保相当解耦的解决方案的同时,将所有信息持久化到单个数据库中:作业分配可以根据需要进行,成功通知可以在数据库中进行记录。您甚至可以设想有多个“作业经理”引用数据并根据需要分配作业……作业经理的db是一个好主意b/c,它将允许作业的持久性和可追溯性。例如,工作人员可以通过WCF web服务与作业经理通信。但您也应该查看其他网格解决方案,如。