如何异步调用我的 WCF 服务?

Posted

技术标签:

【中文标题】如何异步调用我的 WCF 服务?【英文标题】:How to make a call to my WCF service asynchronous? 【发布时间】:2010-09-28 21:14:38 【问题描述】:

我有一个从 Windows 服务调用的 WCF 服务。

WCF 服务运行一个 SSIS 包,该包可能需要一段时间才能完成,我不希望我的 Windows 服务必须等待它完成。

如何使我的 WCF 服务调用异步? (或者默认是异步的?)

【问题讨论】:

【参考方案1】:

MSDN 的以下文章将满足您的所有需求:

Implementing an Async Service Operation

Calling WCF Service Async

Designing Service Contracts

【讨论】:

如果我写下 [OperationContractAttribute(AsyncPattern=true)] ,那么如果没有提到,实现工作作为异步,那么相同的代码作为同步运行?我说的对吗?【参考方案2】:

在 Visual Studio 2010 上,在 Add Service Reference > click Advanced button > check the Generate Asynchronous Operations 复选框上。

完成后,异步操作将被添加并可供您使用。

【讨论】:

太好了,帮了我很多忙……谢谢伙计!【参考方案3】:

服务端:

[ServiceContract]
public interface IMyService

    [OperationContract]
    bool DoWork(int i);

客户端:

[ServiceContract(Name = nameof(IMyService))]
public interface IMyServiceClient : IMyService

    [OperationContract]
    Task<bool> DoWorkAsync(int i);

【讨论】:

这个问题的很多答案都来自 2012 年之前。这是现代的方法。 正是我想要的。这是“共享接口”和旧项目的巧妙解决方案,从一开始就不是异步的 :) 请注意,如果您想在应用程序中使用共享接口名称,您还必须更改配置名称.config 文件 :) 我很难找到 WCF Rest 服务异步调用的简单完整示例。【参考方案4】:

您的客户端(Windows 服务?)内部的 WCF 代理需要在创建时指定您希望异步操作可用。

您可以通过右键单击现有 WCF 代理并选择“配置服务引用”来修改它,您只需在此处选中“生成异步操作”旁边的复选框

好的,这就是 WCF 代理处理的事情。 现在您需要在客户端内部使用带有代理的 APM(异步编程模型)。

【讨论】:

以上是关于如何异步调用我的 WCF 服务?的主要内容,如果未能解决你的问题,请参考以下文章

如何异步处理 WCF 的传入调用?

WCF 仅异步操作

WCF服务需要调用异步

对 WCF 服务的异步调用不会保留 CurrentCulture

对 WCF 服务的异步调用不会保留 CurrentCulture

System.OutOfMemoryException 对 WCF 服务的多个异步调用