C # определяет размер входного и выходного сообщения WCF - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь выяснить, как определить размер сообщения WCF непосредственно перед его десериализацией / сериализацией в / из объекта DTO на Клиент сторона:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    MyResponse SampleMethod(MyRequest request);
}

И в настоящее время у меня есть этоИнспектор сообщений для регистрации запросов и времени их выполнения на клиенте:

internal sealed class LoggingMessageInspector : IClientMessageInspector
{
    public event EventHandler<State> OnBegin;
    public event EventHandler<State> OnEnd;

    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        var state = new State
                    {
                        MethodName = GetMethodName(request)
                    };
        OnBegin?.Invoke(this, state);
        state.Timer = Stopwatch.StartNew();
        return state;
    }

    private string GetMethodName(Message msg)
    {
        try
        {
            return Path.GetFileName(msg.Headers.Action);
        }
        catch
        {
            return null;
        }
    }
    public void AfterReceiveReply(ref Message reply, object correlationState)
    {
        var state = correlationState as State;
        if(state == null)
            return;

        state.Timer.Stop();
        OnEnd?.Invoke(this, state);
    }
}

Как я вижу в реализации метода ToString класса Message - он выполняет сериализацию XML, которая излишне проста для подсчета байтов.Что еще я могу сделать, чтобы получить размеры сообщений для каждого звонка на клиенте?Кроме того, как можно посчитать размер сообщения, которое фактически передается по сети?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...