我有一个在网络和移动平台上运行的应用程序,它的用户可以使用该应用程序上传照片。我需要一个网络服务来处理在网络和移动应用程序上上传和显示图像。
将 ASP.NET Web API 用作图像服务并在其上发出 POST 请求以上传照片是个好主意吗?这种方法有哪些优点和缺点?是否为这样的服务使用 ASP.NET Web API 开销?
我有一个在网络和移动平台上运行的应用程序,它的用户可以使用该应用程序上传照片。我需要一个网络服务来处理在网络和移动应用程序上上传和显示图像。
将 ASP.NET Web API 用作图像服务并在其上发出 POST 请求以上传照片是个好主意吗?这种方法有哪些优点和缺点?是否为这样的服务使用 ASP.NET Web API 开销?
ASP.NET Web API 与异步 I/O 配合得很好——它使用 .NET 4(尤其是 .Net 4.5)中新的基于任务的异步模型,这使得构建异步控制器和协调多个异步操作变得直接。如果这个模型对你来说是新的,那么我会推荐这个在 channel9 上的演示。
对于上传,ASP.NET Web API 支持基于表单的通用 HTML 文件上传模型的完全异步 MIME 分段文件上传。您可以在作为 source 的 FileUploadSample中看到一个示例。
使用 StreamContent 异步提供文件也很简单。在这里,您(在控制器中)打开一个文件,创建一个 HttpResponseMessage 并以包装文件的 StreamContent 的形式附加一个 HttpContent ,就是这样。
这一切都发生在没有阻塞 I/O 上的任何线程的情况下。
希望这可以帮助,
亨里克
这取决于您的应用程序可能有多少并发和多少用户。
这种应用程序的本质是以 I/O 为中心,这意味着您的 ASP.NET 服务器将大部分时间等待 I/O 操作完成。在高并发的情况下,这将导致您的 ASP.NET 托管线程池因线程不足而崩溃。
我会推荐:
1) 如果您保持 ASP.NET 主动权,请实现 IAsync 编程模型。这将使您的 Web 应用程序更能够扩展。
2)如果您不想处理 IAsyncResult,则在中间放置一些负载均衡器并水平扩展,根据需要添加更多服务器。这可能需要将您的 ASP.NET 应用程序重新设计为 Web Farm,从而增加一些复杂性(会话状态管理、身份验证、授权等)。
3) 尝试不同的技术,Node.js 以处理 I/O 高延迟、编程模型而闻名。