Called after client calls are returned and before service responses are sent.
Namespace:
System.ServiceModel.Dispatcher
Assembly:
System.ServiceModel (in System.ServiceModel.dll)
Visual Basic (Declaration)
Sub AfterCall ( _
operationName As String, _
outputs As Object(), _
returnValue As Object, _
correlationState As Object _
)
Dim instance As IParameterInspector
Dim operationName As String
Dim outputs As Object()
Dim returnValue As Object
Dim correlationState As Object
instance.AfterCall(operationName, outputs, _
returnValue, correlationState)
void AfterCall(
string operationName,
Object[] outputs,
Object returnValue,
Object correlationState
)
void AfterCall(
String^ operationName,
array<Object^>^ outputs,
Object^ returnValue,
Object^ correlationState
)
function AfterCall(
operationName : String,
outputs : Object[],
returnValue : Object,
correlationState : Object
)
On outbound calls from a client, the inspector is invoked before the request contents are serialized and sent to the service. The inspector is also called after the response has been deserialized but before the return values have been dispatched to the proxy method.
On inbound calls to a service, the inspector is invoked after parameters are deserialized but before they are dispatched to the service operation.
The following code example shows an IParameterInspector implementation that:
Writes the operation name and return value to the console after a response has been deserialized by the service or a request has been serialized by a client.
Writes the operation name to the console after deserializing a response on the client or after a response has been serialized on the service.
#region IParameterInspector Members
public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
{
Console.WriteLine(
"IParameterInspector.AfterCall called for {0} with return value {1}.",
operationName,
returnValue.ToString()
);
}
public object BeforeCall(string operationName, object[] inputs)
{
Console.WriteLine("IParameterInspector.BeforeCall called for {0}.", operationName);
return null;
}
The following code example shows how to use either System.ServiceModel.Description..::.IOperationBehavior, System.ServiceModel.Description..::.IEndpointBehavior, or System.ServiceModel.Description..::.IServiceBehavior to insert IParameterInspector objects.
using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Configuration;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using System.Text;
namespace Microsoft.WCF.Documentation
{
public class InspectorInserter : BehaviorExtensionElement, IServiceBehavior, IEndpointBehavior, IOperationBehavior
{
#region IServiceBehavior Members
public void AddBindingParameters(
ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase,
System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints,
BindingParameterCollection bindingParameters
)
{ return; }
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher chDisp in serviceHostBase.ChannelDispatchers)
{
foreach (EndpointDispatcher epDisp in chDisp.Endpoints)
{
epDisp.DispatchRuntime.MessageInspectors.Add(new Inspector());
foreach (DispatchOperation op in epDisp.DispatchRuntime.Operations)
op.ParameterInspectors.Add(new Inspector());
}
}
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase){ return; }
#endregion
#region IEndpointBehavior Members
public void AddBindingParameters(
ServiceEndpoint endpoint, BindingParameterCollection bindingParameters
) { return; }
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add(new Inspector());
foreach (ClientOperation op in clientRuntime.Operations)
op.ParameterInspectors.Add(new Inspector());
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new Inspector());
foreach (DispatchOperation op in endpointDispatcher.DispatchRuntime.Operations)
op.ParameterInspectors.Add(new Inspector());
}
public void Validate(ServiceEndpoint endpoint){ return; }
#endregion
#region IOperationBehavior Members
public void AddBindingParameters(
OperationDescription operationDescription, BindingParameterCollection bindingParameters
)
{ return; }
public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
{
clientOperation.ParameterInspectors.Add(new Inspector());
}
public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
{
dispatchOperation.ParameterInspectors.Add(new Inspector());
}
public void Validate(OperationDescription operationDescription){ return; }
#endregion
public override Type BehaviorType
{
get { return typeof(InspectorInserter); }
}
protected override object CreateBehavior()
{ return new InspectorInserter(); }
}
}
Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003
The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
.NET Framework
Supported in: 3.5, 3.0
Reference