The filters' implementation of Chain of Responsibility allows you to wrap the request or response using the Decorator pattern. This is something else that the listener does not allow you to do.
Oh, and I think the listener can only be run when a request is created or destroyed. This means it can not be configured to run during a forwarding of a request - but as I recall it is possible to configure listeners to run on any of the different kinds of dispatching on a request.
A good workman is known by his tools.
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com