Трассировка WCF в ядре ASP.NET - PullRequest
0 голосов
/ 30 августа 2018

Мы использовали WCF поверх ASP.NET и недавно переключились на WCF через ASP.NET Core. Это было довольно сложно реализовать, потому что ASP.Net Core не поддерживает WCF из коробки. С одной стороны, вся модель конфигурации XML web.config была выгружена в ASP.NET Core, поэтому мы не можем настроить там трассировку WCF.

т.е. этот документ бесполезен: https://docs.microsoft.com/en-us/dotnet/framework/wcf/diagnostics/tracing/configuring-tracing

Нам пришлось взломать ASP.NET Core, поместив http-прокси между WCF и портом 80. WCF фактически работает на другом порту.

Вопрос в том, как включить трассировку WCF, если ASP.NET Core не обращает внимания на web.config?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

В случае трассировки на стороне клиента я использовал настраиваемое поведение конечной точки (IEndpointBehavior) с инспектором ведения журнала сообщений (IClientMessageInspector) для получения входных и выходных сообщений.

Инициализация клиента:

_serviceClient = new MyCustomServiceClient();
_serviceClient.Endpoint.Address = new System.ServiceModel.EndpointAddress(_configParams.ServiceUri);
_serviceClient.Endpoint.EndpointBehaviors.Add(new EndpointLoggingBehavior("MyCustomService"));

Реализация EndpointLoggingBehavior:

public class EndpointLoggingBehavior : IEndpointBehavior
    {
        public EndpointLoggingBehavior(string serviceName)
        {
            _serviceName = serviceName;
        }

        private readonly string _serviceName;

        public void AddBindingParameters(ServiceEndpoint endpoint,
            System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
        {
        }

        public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
        {
            clientRuntime.ClientMessageInspectors.Add(new MessageLoggingInspector(_serviceName));
        }

        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
        {
        }

        public void Validate(ServiceEndpoint endpoint)
        {
        }
    }

Реализация MessageLoggingInspector:

public class MessageLoggingInspector : IClientMessageInspector
    {
        private readonly string _serviceName;
        public MessageLoggingInspector(string serviceName)
        {
            _serviceName = serviceName;
        }
        public void AfterReceiveReply(ref Message reply, object correlationState)
        {
            // copying message to buffer to avoid accidental corruption
            var buffer = reply.CreateBufferedCopy(int.MaxValue);
            reply = buffer.CreateMessage();
            // creating copy
            var copy = buffer.CreateMessage();
            //getting full input message
            var fullInputMessage = copy.ToString();

        }
        public object BeforeSendRequest(ref Message request, IClientChannel channel)
        {
            // copying message to buffer to avoid accidental corruption
            var buffer = request.CreateBufferedCopy(int.MaxValue);
            request = buffer.CreateMessage();
            // creating copy
            var copy = buffer.CreateMessage();
            //getting full output message
            var fullOutputMessage = copy.ToString();
            return null;
        }
    }

Тогда, конечно, вам нужно будет записать эти сообщения в любое хранилище.

0 голосов
/ 03 февраля 2019

Вы будете использовать ETW Tracing для WCF в .NET Core

https://github.com/dotnet/wcf/blob/master/Documentation/HowToUseETW.md

По моему опыту, у вас есть некоторые ограничения

  1. Трассировка включена для всех приложений WCF, а не для настройки одного приложения через файл конфигурации
  2. Вы не можете выводить сообщения с трассировкой ETW
  3. SvcTraceViewer.exe плохо работает для проверки трассировки, вам нужно перейти к PerfView.exe, который может представить кривую обучения

Преимущества ETW

  1. Вы избегаете снижения производительности от классических форм трассировки
  2. Нет больше изменений конфигурации для запуска / остановки трассировки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...