Сценарии - Перехват текста сообщений

Page / - Изменено Alexandr Fokin в 2023/01/05 20:56

Перехват текста сообщений

Изменено Alexandr Fokin

в 2023/01/05 20:56

Оглавление

Реализация перехвата сообщений, отправленных и полученных клиентом.
Также можно реализовать общую обертку над всеми клиентами, предоставляющую интерфейс перехвата

using System.ServiceModel;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Description;
using System.ServiceModel.Channels;
namespace Test
{
class MessageBehavior
: IClientMessageInspector,
IEndpointBehavior
{
public Action<string> OnSend { get; set; }
public Action<string> OnReceive { get; set; }
public void AddBindingParameters(
ServiceEndpoint endpoint,
BindingParameterCollection bindingParameters
)
{
}
public void ApplyClientBehavior(
ServiceEndpoint endpoint,
ClientRuntime clientRuntime
)
{
clientRuntime
.ClientMessageInspectors
.Add(this);
}
public void ApplyDispatchBehavior(
ServiceEndpoint endpoint,
EndpointDispatcher endpointDispatcher
)
{
}
public void Validate(
ServiceEndpoint endpoint
)
{
}
public object BeforeSendRequest(
ref Message request,
IClientChannel channel
)
{
OnSend?.Invoke(
request.ToString()
);
return null;
}
public void AfterReceiveReply(
ref Message reply,
object correlationState
)
{
OnReceive?.Invoke(
reply.ToString()
);
}
}
static class Test
{
static void RunTest()
{
using (Service1Client client = new Service1Client())
{
client
.Endpoint
.EndpointBehaviors
.Add(
new MessageBehavior()
{
OnReceive = OnMsg,
OnSend = OnMsg
}
);
var res = client.GetData(123);
}
}
}
}

ссылки:

WCF Client Request / Response Message Inspection
http://developereventlog.blogspot.com/2012/07/wcf-client-request-response-message.html

IClientMessageInspector Интерфейс
https://docs.microsoft.com/ru-ru/dotnet/api/system.servicemodel.dispatcher.iclientmessageinspector?view=dotnet-uwp-10.0

ClientRuntime Класс
https://docs.microsoft.com/ru-ru/dotnet/api/system.servicemodel.dispatcher.clientruntime?view=netframework-4.8

SoapHttpClientProtocol

Получение текста запросов из SoapHttpClientProtocol
https://habr.com/ru/post/337672/

Getting the raw SOAP XML sent via SoapHttpClientProtocol
https://orbinary.com/blog/2010/01/getting-the-raw-soap-xml-sent-via-soaphttpclientprotocol/