Raw Messages
public class CustomBehavior : IEndpointBehavior
{
#region
IEndpointBehavior Members
public void AddBindingParameters(ServiceEndpoint serviceEndpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{ }
public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, System.ServiceModel.Dispatcher.ClientRuntime behavior)
{
Console.WriteLine("Client Side:Client behaviour is called");
Console.WriteLine("Client behaviour Adding Message Inspector class");
//Add the inspector
behavior.MessageInspectors.Add(new CustomMessageInspector());
}
public void ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)
{
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new CustomDispatchinspector());
Console.WriteLine("Server Side:Apply dispatch behaviour is called");
}
public void Validate(ServiceEndpoint serviceEndpoint)
{ }
#endregion
}
//client side Message inspector
public class CustomMessageInspector : IClientMessageInspector
{
#region
IClientMessageInspector Members
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
}
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
Console.WriteLine("Message inspector logging request message on client side");
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(request.ToString());
Console.ResetColor();
return null;
}
#endregion
}
//server side Message inspector
class CustomDispatchinspector : IDispatchMessageInspector
{
#region IDispatchMessageInspector Members
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
Console.WriteLine("Message inspector logging request message on server side");
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(request.ToString());
Console.ResetColor();
return null;
}
public void BeforeSendReply(ref Message reply, object correlationState)
{
Console.WriteLine("before send reply");
}
#endregion
}
public class ServiceBehavior: IServiceBehavior
{
public ServiceBehavior() { }
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher chDisp in serviceHostBase.ChannelDispatchers)
{
foreach (EndpointDispatcher epDisp in chDisp.Endpoints)
{
epDisp.DispatchRuntime.MessageInspectors.Add(new CustomDispatchinspector());
}
}
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
}
Client side You do
myChannelFactory.Endpoint.Behaviors.Add(new CustomBehavior());
Server side You do
serviceHost.Description.Behaviors.Add(new ServiceBehavior());