如何使我的WCF 图像上传服务异步而不是同步。我的SaveImage
函数是直接从异步 javascript 调用中调用的。
合同(IImageWCFService.cs):
[ServiceContract(Namespace = "MyServices.org")]
public interface IImageWCFService
{
[OperationContract(AsyncPattern = true)]
[WebInvoke(Method = "POST", ResponseFormat=WebMessageFormat.Json, UriTemplate="SaveImage")]
void SaveImage(Stream stream);
}
服务(ImageWCFService.svc.cs):
public void SaveImage(Stream stream)
{
// long running task up manipulating the image
// some lines of code contains image upload to Amazon S3 functions
}
我返回 void 是因为这应该是单向调用,用户不需要从函数中获取任何结果或它是否成功。
现在当这个 WCF 服务运行时,它将消耗主线程。我希望它异步运行。我读过推荐的方法是使用:
[OperationContract(AsyncPattern = true)]
或WCF 的基于任务的异步模式。
我读过很多文章,但仍然很困惑如何在我的函数中实现它。我需要一个代码示例来显示我的图像上传功能的实现。
注意:关于这个问题中各种异步实现之间差异的一个很好的来源- 它说实现它的最佳方法是对 WCF 使用基于任务的异步模式。
同样,调用是直接从 JavaScript 进行的,但我没有问题创建一个 web 服务 (asmx) 一个保存服务器,如果需要的话,它将在服务器端调用 WCF 服务,但是我再次对所有内容感到困惑这个。
谢谢。