自定义的一个Behavior: 从Debug输出看到来回的Messages

就两个class, 好用又方便~

MyMessageInspector

using System;

using System.Xml;

using System.IO;

using System.ServiceModel;

using System.ServiceModel.Channels;

using System.ServiceModel.Dispatcher;

 

namespace WCFExtentions

{

    public class MyMessageInspector : IDispatchMessageInspector

    {

        public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)

        {

            System.Diagnostics.Debug.WriteLine(request.ToString());

            return null;

        }

 

        public void BeforeSendReply(ref Message reply, object correlationState)

        {

            System.Diagnostics.Debug.WriteLine(reply.ToString());

        }

    }

}


MyMessageInspectionBehaviorAttribute

using System;

using System.ServiceModel;

using System.Collections.ObjectModel;

using System.ServiceModel.Channels;

using System.ServiceModel.Description;

using System.ServiceModel.Dispatcher;

 

namespace WCFExtentions

{

    [AttributeUsage(AttributeTargets.Class)]

    public class MyMessageInspectionBehaviorAttribute : Attribute, IServiceBehavior  

    {

        #region IServiceBehavior Members

 

        public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)

        {     

        }

 

        public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)

        {

            foreach (ChannelDispatcher channelDispatch in serviceHostBase.ChannelDispatchers)

            {

                foreach (EndpointDispatcher endpointDispatch in channelDispatch.Endpoints)

                {

                    endpointDispatch.DispatchRuntime.MessageInspectors.Add(new MyMessageInspector());

                }

            }

        }

 

        public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)

        {

        }

 

        #endregion

    }

}


给服务的加上这个属性, 然后你就可以在调试的时候看到了:
 

原文地址: http://blogs.msdn.com/kaevans/archive/2006/10/01/779886.aspx

原文地址:https://www.cnblogs.com/Dah/p/520052.html