Использовать фильтр ISAPI для отслеживания и времени вызова WCF? - PullRequest
1 голос
/ 22 мая 2009

Я создаю веб-приложение с использованием WCF, которое будет использоваться другими приложениями в качестве службы. Наше приложение будет установлено на ферме веб-сервисов и сбалансировано для целей масштабируемости. Иногда мы сталкиваемся с проблемами, характерными для одного веб-сервера, и мы хотели бы иметь возможность определить по ответу, с какого веб-сервера был обработан запрос, а также, возможно, информацию о времени. Например, этот запрос был обработан WebServer01, и его завершение заняло 200 мс.

Первым решением, которое пришло на ум, было создание фильтра ISAPI для добавления заголовка HTTP, который хранит эту информацию в ответе. Это кажется мне тем, что кто-то должен был сделать раньше. Есть ли лучший способ сделать это или готовый фильтр ISAPI, который я могу использовать для этого?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 22 мая 2009

У меня нет готового решения для вас, но я могу указать вам на IHttpModule . См. Код в Инструмент и мониторинг приложений ASP.NET с использованием WMI и MOM 2005 , например.

    private DateTime startTime;

    private void context_BeginRequest(object sender, EventArgs e)
    {
        startTime = DateTime.Now;
    }

    private void context_EndRequest(object sender, EventArgs e)
    {
        // Increment corresponding counter
        string ipAddress = HttpContext.Current.Request.
            ServerVariables["REMOTE_ADDR"];
        if (HttpContext.Current.Request.IsAuthenticated)
            authenticatedUsers.Add(ipAddress);
        else
            anonymousUsers.Add(ipAddress);
        // Fire excessively long request event if necessary
        int duration = (int) DateTime.Now.Subtract(
            startTime).TotalMilliseconds;
        if (duration > excessivelyLongRequestThreshold)
        {
            string requestPath=HttpContext.Current.Request.Path;
            new AspNetExcessivelyLongRequestEvent(applicationName,
                duration,requestPath).Fire();
        }
    }
0 голосов
/ 22 мая 2009

WCF предлагает гораздо более хорошие точки расширения, чем фильтры ISAPI. Вы могли бы, например, создайте инспектор сообщений на стороне клиента, который вызывается непосредственно перед отправкой сообщения на сервер, а затем также вызывается при возврате ответа, и, таким образом, вы можете довольно легко измерить время, необходимое для вызова службы с точки зрения клиента. 1001 *

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

Марк

...