在(asp.net + wcf)Web应用程序中,存储文件的最佳方法是什么?

4
我正在使用asp.net和WCF作为三层架构创建一个Web应用程序,它看起来很像一个社交网站。用户可以在系统中注册,并上传他们的个人资料图片、文档、视频剪辑等。所以,我想知道存储这些文件的最佳方式是什么?在WCF端还是Web应用程序端?
另外,我想知道,如果我选择将这些文件作为一组文件夹存储在Web应用程序端,如何使这些文件夹共享并允许其他不同项目(例如桌面客户端需要上传文件到该共享文件夹)访问?
提前感谢您所有人的帮助。
2个回答

2
我认为问题更好的表述是:
  • 将图像保存在Web应用程序中的文件夹中,或者保存在相邻位置,并将元数据存储在数据库中
  • 通过WCF从数据库中获取保存的图像
第二种方法可能会比较慢。通过服务来获取信息,进行转换,使用正确的MIME类型的HTTP处理程序将二进制流输出到浏览器...
大多数架构都采取了中间方式:将图像保存在UI层附近或内部,并将有关它们的元数据存储在数据库中。检索该信息通常只是一堆字符串,因此很容易检索。
更新新问题:
由于WinForms应用程序/其他项目不在您的原始问题中,因此这偏离了原来的话题。在这种情况下,可以选择以下某些方案:
  • 将图像存储在WCF层后面作为公共基础,并使用额外的资源来提取字节数组。
  • 将图像存储在Web UI层中,并使用服务(asmx或WCF)向WinForms客户端公开图像。
  • 在运行Web UI的服务器上为WinForms客户端创建共享,在其中存储图像。当然,一定要尊重安全性和可能的黑客攻击。
这取决于最常用的场景是什么。我的假设是Web UI层将主要用于使用WinForms进行图像处理吗?如果是这样,还有可用于此类操作的ASP.NET第三方控件,因此对WinForms客户端的需求将减少。

好的,谢谢。我也认为第一种方法最适合我的应用程序。正如我在第二个问题中提到的那样,假设有一个桌面客户端将要上传文件到该Web应用程序中,我如何访问那些靠近UI层(Web应用程序)的文件夹? - Lahiru Ruhunage
如果您有新的问题,我建议您开启一个新的讨论线程。简短明了的问题更容易得到合适的答案。 - Kris van der Mast
好的,我会创建一个新线程。请查看以下链接: http://stackoverflow.com/questions/3362341/how-to-share-a-folder-in-a-asp-net-web-application-with-a-win-form-client - Lahiru Ruhunage

2
这取决于你期望这个东西有多大。如果是为更广泛的互联网服务并且你期望它变得很大,将其放在Web服务器上将使通过添加新的Web服务器来扩展应用程序变得困难。一种方法是将物理文件上传到Web服务器,以便用户快速上传,然后使用FileWatcher触发协调员后台服务。该服务将把文件传播到Web群集中的所有节点,以便其他节点的后续请求可以找到文件。
如果这是一个仅供公司内部使用的小型应用程序,则可以将其放在Web服务器上,并满足以下条件:
- 您完全控制托管服务器,以便您可以设置适当的文件夹权限。 - 您编写保存和检索文件的代码的方式,使其可以轻松移动到较低层。通过接口进行操作并注入实现。

好的,谢谢。这个应用程序将托管在Web服务器上,并且任何用户都可以通过互联网访问它。问题是,如果我将其保存在WCF层(业务层)中,则每次都必须调用WCF服务来检索文件。我认为这将是一项痛苦的任务。最好的方法是在UI层中保存文件,并使用WCF服务将文件URL保存在数据层中,就像XIII所说的那样。 - Lahiru Ruhunage
是的,出于性能考虑,这是一个不错的方法,但您需要考虑是否有多个Web服务器。您需要某种方式在多个Web服务器之间共享文件。这就是为什么我建议结合一个单独的服务来负责协调这些文件。 - Daniel Dyson
是的,如果我拥有多个 Web 服务器,那么这很有用。但我认为没有机会将此应用程序托管在多个服务器上。因此,我认为 XIII 解决方案对我很合适。 - Lahiru Ruhunage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接