【问题标题】:WCF contracts async service vs async clientWCF 合同异步服务与异步客户端
【发布时间】:2011-09-17 00:36:14
【问题描述】:

问: WCF 异步服务调用和异步客户端调用对于客户端有什么区别?

现在我有一份看起来像这样的合同

[ServiceContract]
public interface IFoo
{        
    [OperationContract(AsyncPattern = true)]
    IAsyncResult BeginGetFoo();

    [OperationContract]
    FooResult EndGetFoo(IAsyncResult asyncResult);  

    ...
}

我正在考虑将它重构为类似的东西(稍后从 WPF 客户端异步调用它)。

[ServiceContract]
public interface IFoo
{        
    [OperationContract]
    FooResult GetFoo(); 

    ...
}

原因是我想为客户简化服务合同。

【问题讨论】:

    标签: wcf asynchronous


    【解决方案1】:

    本质上没有区别(如果写得正确 - 请注意下面更正的签名:Begin 操作需要采用 AsyncCallbackobject 参数,而 End 操作不得使用 [OperationContract] 修饰)。如果您想自己处理线程,请随意将其声明为同步操作;如果你想让 WCF 处理它,那么使用异步模式。但是两种情况下客户端发送给服务器的请求是一样的。

    [ServiceContract] 
    public interface IFoo 
    {         
        [OperationContract(AsyncPattern = true)] 
        IAsyncResult BeginGetFoo(AsyncCallback callback, object state); 
        FooResult EndGetFoo(IAsyncResult asyncResult);   
    
        ... 
    } 
    

    【讨论】:

    • 在使用基于任务的异步实现(即操作将其返回类型声明为 Task)时,是否有类似的方法为客户端提供“简单”接口。不同之处在于,我看到的所有示例都只为操作声明了一个方法(而不是上面的 2 个),并且一个方法的返回类型为 Task ——这似乎暗示客户端是将收到 Task 的结果,我想避免这种情况。
    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多