This documentation is archived and is not being maintained.

DuplexClientBase<TChannel> Class

Used to create a channel to a duplex service and associate that channel with a callback object.

Namespace:  System.ServiceModel
Assembly:  System.ServiceModel (in System.ServiceModel.dll)

public abstract class DuplexClientBase<TChannel> : ClientBase<TChannel>
where TChannel : class

Type Parameters


The type of the channel to be created.

Use the DuplexClientBase<TChannel> class to create a channel to a service that specifies a callback object. The DuplexClientBase<TChannel> object wraps a System.ServiceModel.DuplexChannelFactory<TChannel> object, which provides the connectivity for the WCF object. You can use either type to connect to a duplex service. For more information about duplex services, see Duplex Services.

Special note for Managed C++ users deriving from this class:

  • Put your cleanup code in (On)(Begin)Close (and/or OnAbort), not in a destructor.

  • Avoid destructors: they cause the compiler to auto-generate IDisposable

  • Avoid non-reference members: they can cause the compiler to auto-generate IDisposable

  • Avoid finalizers; but if you include one, you should suppress the build warning and call SuppressFinalize(Object) and the finalizer itself from (On)(Begin)Close (and/or OnAbort) in order to emulate what would have been the auto-generated IDisposable behavior.

The following example shows the use in the client of a duplex WCF client type, the SampleDuplexHelloClient, to pass a new System.ServiceModel.InstanceContext object with the callback object to listen for callbacks.

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Threading;

namespace Microsoft.WCF.Documentation
   IncludeExceptionDetailInFaults= true, 
  public class Client : SampleDuplexHelloCallback
    AutoResetEvent waitHandle;

    public Client()
      waitHandle = new AutoResetEvent(false);

    public void Run()
      // Picks up configuration from the configuration file.
      SampleDuplexHelloClient wcfClient
        = new SampleDuplexHelloClient(new InstanceContext(this), "WSDualHttpBinding_SampleDuplexHello");
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("Enter a greeting to send and press ENTER: ");
        Console.Write(">>> ");
        Console.ForegroundColor = ConsoleColor.Green;
        string greeting = Console.ReadLine();
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("Called service with: \r\n\t" + greeting);
        Console.WriteLine("Execution passes service call and moves to the WaitHandle.");
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.WriteLine("Set was called.");
        Console.Write("Press ");
        Console.ForegroundColor = ConsoleColor.Red;
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.Write(" to exit...");
      catch (TimeoutException timeProblem)
        Console.WriteLine("The service operation timed out. " + timeProblem.Message);
      catch (CommunicationException commProblem)
        Console.WriteLine("There was a communication problem. " + commProblem.Message);
    public static void Main()
      Client client = new Client();

    public void Reply(string response)
      Console.WriteLine("Received output.");
      Console.WriteLine("\r\n\t" + response);


Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0