1

サービスとして他のアプリケーションによって消費される WCF を使用して Web アプリケーションを構築しています。私たちのアプリは Web サービスのファームにインストールされ、スケーラビリティのために負荷分散されます。1 つの Web サーバーに固有の問題が発生することがあります。応答から、要求が処理された Web サーバーと、場合によってはタイミング情報も判別できるようにしたいと考えています。たとえば、このリクエストは WebServer01 によって処理され、リクエストが完了するまでに 200 ミリ秒かかりました。

最初に思いついた解決策は、ISAPI フィルターを作成して、この情報を応答に格納する HTTP ヘッダーを追加することでした。これは、誰かが以前にやったにちがいないようなことだと思います。これを行うためのより良い方法、またはこれに使用できる既製の ISAPI フィルターはありますか?

前もって感謝します

4

2 に答える 2

0

既製のソリューションはありませんが、IHttpModuleを紹介できます。たとえば、「WMI と MOM 2005 を使用して ASP.NET アプリを計測および監視する」のコードを参照してください。

    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();
        }
    }
于 2009-05-22T05:22:28.850 に答える
0

WCF は、ISAPI フィルターよりも優れた拡張ポイントを提供します。たとえば、メッセージがサーバーに送信される直前に呼び出され、応答が返されたときにも呼び出されるクライアント側のメッセージ インスペクターを作成できます。これにより、クライアントからのサービス呼び出しに必要な時間をかなり簡単に測定できます。視点。

インターフェースをチェックしてくださいIClientMessageInspector- それはあなたが探しているものかもしれません. このインターフェイスの使用方法については、この優れたブログ エントリも参照してください。

マルク

于 2009-05-22T05:18:16.060 に答える