How to call wcf service Asynchronously

if wcf service is design the below way then please guide me how call Add() function Asynchronously from client side. thanks

[ServiceContract]
public interface IAddTwoNumbers
{
    // If the asynchronous method pair
    // appears on the client channel, the client can call 
    // them asynchronously to prevent blocking.
    [OperationContract (AsyncPattern=true)]
    IAsyncResult BeginAdd(int a, int b, AsyncCallback cb, AsyncState s);

    [OperationContract]
    int EndAdd(IAsyncResult r);

    // This is a synchronous version of the BeginAdd/EndAdd pair.
    // It appears in the client channel code by default. 
    [OperationContract]
    int Add(int a, int b);
   }

Answers


I think the best way is to convert the APM pattern into the Task pattern, using Task.Factory.FromAsync:

public static class WcfExt
{
    public static Task<int> AddAsync(this IAddTwoNumbers service, int a, int b)
    {
        return Task.Factory.FromAsync(
             (asyncCallback, asyncState) =>
                 service.BeginAdd(a, b, asyncCallback, asyncState),
             (asyncResult) =>
                 service.EndAdd(asyncResult), null);
    }
}

Usage:

IAddTwoNumbers service = CreateWcfClientProxy();
int result = await service.AddAsync(a, b);

There is no such thing as an async wire communication pattern, and WFC is no exception. Going async across the wire requires fundamental changes in your service and your contract. Specifically your contract has to be a bidirectional contract and the 'end' must be pushed from the service to the client, along with the result. In other words, across the wire the 'async' becomes a callback.


Need Your Help

Angularjs decoupling backend models from controller

angularjs mvvm

I am building a CRUD application using angularjs. Currently, I am using the json models returned from the back-end directly in my controllers. These models have a 3-4 level deep hierarchy. So my

how to display simplecart.js items customised

javascript php html ajax

I want to display simplecart.js items in a custom formate. below code is displaying all the cart items in default formate.