C# 为web服务创建磁盘缓存的最佳方法

C# 为web服务创建磁盘缓存的最佳方法,c#,wcf,web-services,caching,C#,Wcf,Web Services,Caching,我创建了一个提供图像的Web服务。这永远是单向沟通。从服务获取图像的一侧,图像将永远不会更改 它有多个源,有些源可能在很远的地方,连接不好。 我已经为它创建了一个内存缓存,但我也希望有一个磁盘缓存,以存储更长时间的图像。 我有点不确定做这件事的最佳方法 首先,我所有的源代码都是Web服务器,所以我真的不知道如何检查我想要使用的图像的最后修改日期(作为示例),以查看文件是否已更改 其次,如何最好地存储本地缓存?只需将文件放到文件夹中,并将日期与原始来源进行比较? 或者,可能将所有时间戳与所有图像一

我创建了一个提供图像的Web服务。这永远是单向沟通。从服务获取图像的一侧,图像将永远不会更改

它有多个源,有些源可能在很远的地方,连接不好。 我已经为它创建了一个内存缓存,但我也希望有一个磁盘缓存,以存储更长时间的图像。 我有点不确定做这件事的最佳方法

首先,我所有的源代码都是Web服务器,所以我真的不知道如何检查我想要使用的图像的最后修改日期(作为示例),以查看文件是否已更改

其次,如何最好地存储本地缓存?只需将文件放到文件夹中,并将日期与原始来源进行比较? 或者,可能将所有时间戳与所有图像一起存储在一个txt文件中,以避免检查文件。 或者,可以将它们存储在本地SQL express数据库中

一般来说,图像不是很大。大多数都在200kb左右。然而,偶尔会有7+mb的内存。 最大的问题是,服务所在的一些位置的连接非常糟糕,它们需要多次使用相同的映像。 没有真正的性能要求,我只是想让它尽可能地响应,对于那些与我们的中央服务器连接糟糕的位置


我不能安装任何“真正的”缓存系统。它必须是我可以在代码中处理的东西。

为什么不在服务器上安装代理服务器,并通过它访问所有远程web服务器?代理服务器将为您处理缓存

编辑:因为你不能安装任何东西,也没有可用的数据库,恐怕你不得不自己实现磁盘缓存

好消息是——这相对容易。您需要选择一个文件夹并将图像文件放在那里。您需要在图像标识和文件名之间建立唯一的映射。如果您的图像ID是数字,那么映射非常简单

当您收到图像请求时,首先检查磁盘上的图像。如果它在那里,你已经有了。如果没有,从远程服务器下载并存储,然后从那里提供服务

您需要考虑并发请求。确保将文件写入磁盘是一个相对简单的过程(下载完成后即可写入)。当您将文件写入磁盘时,请确保没有人可以打开它进行读取,这样可以避免发送不完整的文件


现在,您只需要处理文件不在缓存中的情况,同时会收到两个请求。如果性能不是真正的问题,只需下载两次。

您需要提供一些相关细节,如数据量、预期性能、是否需要“群集”、数据完整性的重要性等!这些都不是问题。源上的图像永远不会更改。一旦它们在源代码上,它们将被批准并且不会更改。聚类也不相关。该服务将在本地Web服务器上运行,在我们所有的位置上,从一个中心位置获取图像。我无法安装代理,我受到了惊吓。它必须是我可以在代码中处理的东西。你能安装其他东西吗?你安装了数据库吗?我有数据库,但不是每个位置都有。数据库与图像源位于同一位置。关于不打开进行读取,这是一个很好的观点。不过还是有个简单的问题。是否有一些常用的(或良好的)文件存放位置?我会选择磁盘上的一个文件夹。这似乎不应该进入用户的文件夹或程序数据。