0

先决条件

  • 服务项目类型:.net 3.5 类库
  • 服务主机:IIS 7.5 / ASP.NET 兼容模式已开启

为服务定义的单个操作DocumentsServiceUploadDocument(Stream stream),可通过 HTTP(webHttp 绑定)访问。

我试着用它来装饰它[OperationContract(IsOneWay=true)]

[OperationContract(IsOneWay=true)]
[WebInvoke(Method="POST", UriTemplate="upload", ResponseFormat=WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.Bare)]
void UploadDocument(System.IO.Stream stream);

另外我注释掉了这些行:

WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.OK;

因为我认为它没有用,因为服务本身会设置 200 状态,因为一切都很好。

我没有为服务使用任何生成的WCF客户端。我使用纯ajax请求来提交文件。

问题

这不是一个即发即弃的请求。它是同步和阻塞的。我怎样才能有真正的即发即弃的行动?我可以在没有任何c#代理客户端的情况下使用它吗?

编辑

  1. 我不能使用Task类 - 我绑定到 .net framework 3.5。
  2. 好吧,我有两个部分:上传本身后处理。上传文件时如何链接这些部分或实例化异步后处理?
4

1 回答 1

1

为什么不简单地使用线程池中的工作线程来发送请求?

例子:

Task.Factory.StartNew(() => UploadDocument(my_stream));

对于 .NET 3.5,您可以直接访问线程池,如下所示:

ThreadPool.QueueUserWorkItem(o => UploadDocument(my_stream));

如果您想在上传完成后做一些事情,请执行以下操作:

ThreadPool.QueueUserWorkItem(o =>
{
    UploadDocument(my_stream);

    DoSomePostProcessing();
});

由于UploadDocument是同步方法,完成DoSomePostProcessing后会运行UploadDocumentDoSomePostProcessing在这种情况下也将在后台线程中运行。

于 2015-09-21T22:18:34.590 回答