O'Reilly logo

Programming WCF Services by Juval Lowy

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Custom Service Synchronization Context

While synchronization context is a general-purpose pattern, out of the box, .NET 2.0 and WCF only implement a single occurrence of it: the Windows Forms synchronization context. Developing a custom service synchronization context has two aspects. The first is implementing a custom synchronization context, and the second is installing it or even applying it declaratively on the service. The first aspect of implementing a custom synchronization context has nothing to do with WCF and is therefore not discussed in this book. Instead in this section I will use my ready-made AffinitySynchronizer class, defined as:

public class AffinitySynchronizer :SynchronizationContext,IDisposable
{
   public AffinitySynchronizer( );
   public AffinitySynchronizer(string threadName);
   public void Dispose( );
}

AffinitySynchronizer executes all calls marshaled to it on the same private worker thread. When attached to the thread that opens a host, all instances of the service, regardless of instance mode, concurrency mode, endpoints, and contracts, will execute on the same worker thread. The implementation of AffinitySynchronizer is available along with the source code of this book. In a nutshell, AffinitySynchronizer creates a worker thread and maintains a synchronized queue of work items. You can even provide AffinitySynchronizer with a thread name as a constructor parameter for debugging and logging purposes. Unassigned, the worker thread name will default to "AffinitySynchronizer ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required