DCSIMG
MEFing WCF Extensibility - Bnaya Eshet

Bnaya Eshet

Disclaimer

MEFing WCF Extensibility

You can download the code here

Wouldn’t it be nice to extend WCF just by inheriting the relevant interface (IServiceBehavior, IDispatchMessageInspector, ext…) and having it hooked without wasting your time on finding the right way of hooking it?

Well this post is all about this topic.

How does it work?

I wrote 2 helper project MEFContracts and WcfPrimitivePlugins which responsible for that magic, and you will also need reference to MEF.

For any of your WCF services or client proxy, you have to add reference to the MEFContracts project and ComponentModel project (which is the MEF CTP 6 implementation), then place the WcfPrimitivePlugins.dll under relative folder called “Plug-Ins” (you can change this place by adding MEF catalog using ).

Modify your client proxy to inherit from MefWcfProxy<TChannel> instead of ClientBase<TChannel>.

On the service side you have 2 option:

1) using MefHost for hosting your service.

2) decorate your service with [MefBehavior] attribute

Writing your WCF extensibility

Writing WCF extensibility is made simple.

Just create class library application and implement the WCF extensibility interface

  • IServiceBehavior 
  • IEndpointBehavior
  • IOperationBehavior
  • IParameterInspector
  • IOperationInvoker
  • IInstanceContextInitializer
  • IDispatchMessageInspector
  • IClientMessageInspector
  • IErrorHandler

optional: add reference to MEFContracts for having advance hooking for timeout, Throttling, and more

Running the sample

The solution can be compile with different compiler switches for demonstrating different scenarios:

image

  • ByAttribute (will hook the service using [MefBehavior] attribute)
  • Debug (will hook the service using MefHost)
  • IgnoreInterception (will detach the hooking)
  • LimitedThrottling (will cause exceptions by limiting the concurrent session and reduce the timeout – that how you see the IErrorHandler plug-in in action)

So choose the compiler switch (recommended: delete the bin folder), compile the solution and run  (WcfClientConsole and WcfHostConsole projects are configure the start with F5)

Summary

Writing WCF extension should be focus on extension and the hooking should be transparent.

Posted: Aug 15 2009, 09:11 PM by bnaya | with 3 comment(s)
תגים:, ,

Comments

No Comments