小编Zar*_*ara的帖子

单向异步/等待WCF中的调用

我有一个传统的WCF服务,其中包含以最经典的方式实现的许多单向操作合同:

    // The interface
    [OperationContract(IsOneWay = true, AsyncPattern = true)]
    IAsyncResult BeginFinalizePublishing(PageContent pageContent, AsyncCallback callback, object asyncState);
    void EndFinalizePublishing(IAsyncResult result);

    // The service
    public IAsyncResult BeginFinalizePublishing(PageContent pageContent, AsyncCallback callback, object asyncState)
    {...}
Run Code Online (Sandbox Code Playgroud)

所以一切都运行正常,现在我需要将其转换为c#5最新的async/await模式.注意操作的单向性.我的问题:

  • 我想我需要AsyncPattern = trueOperationContract属性中删除它.
  • 用界面和类中的IAsyncResult返回类型替换.voidasync void
  • 为方便起见,删除Begin/End并添加Async后缀.

现在我该如何从客户端调用单向操作? 对于单向呼叫,在客户端右侧没有使用async/await?

这是正确的,将导致客户端的真正异步处理.

    // The proxy
    public void FinalizePublishingAsync(PageContent pageContent)
    {
        Channel.FinalizePublishingAsync(pageContent);
    }

        // The consumer of the client
        // No way to use await for void methods. 
        IComPublisherFinalizerClient cl = new IComPublisherFinalizerClient(); …
Run Code Online (Sandbox Code Playgroud)

.net c# wcf async-await

6
推荐指数
1
解决办法
3449
查看次数

标签 统计

.net ×1

async-await ×1

c# ×1

wcf ×1