Я пытаюсь выяснить, как определить размер сообщения 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, которая излишне проста для подсчета байтов.Что еще я могу сделать, чтобы получить размеры сообщений для каждого звонка на клиенте?Кроме того, как можно посчитать размер сообщения, которое фактически передается по сети?