Appendix B. Headers and Contexts

In every method for every call on a .NET object, there are explicit arguments passed in as method parameters and implicit parameters available for the method body. Such implicit parameters include the thread the call executes on (available via Thread.Current); the call’s app domain (available via AppDomain.Current); the call’s transactions, if any (available via Transaction.Current); the call synchronization context (available via SynchronizationContext.Current); the security principal of the call (available via Thread.CurrentPrincipal); and even the little-known execution context of the call itself (available via Thread.CurrentContext). These out-of-band parameters provide in effect the logical execution context of the call, essential for the functioning of the object and .NET itself. But how can you pass additional contextual parameters to your WCF service, forming your own custom context? Such a need is surprisingly common and useful: for example, Chapter 4 uses a custom context to manage the instance IDs of durable services, Chapter 8 uses a custom context to provide the call priority, and Chapter 9 uses a custom context to pass the address of a queued response service. This appendix presents and contrasts two distinct techniques for passing and managing custom contexts, using the message headers or the dedicated context binding. For both options, I will share dedicated helper classes designed to streamline and automate the interaction. You will ...

Get Programming WCF Services, 3rd Edition now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.