2

如何使我的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 服务,但是我再次对所有内容感到困惑这个。

谢谢。

4

0 回答 0