加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – MVC中的SignalR偏移Application Insights

发布时间:2020-12-16 06:55:27 所属栏目:asp.Net 来源:网络整理
导读:我们刚开始在MVC应用程序中使用SignalR,现在由于平均响应时间很长,我们得到了一堆警报.我怀疑这会误导,因为应用程序没有遇到性能下降. SignalR似乎使用此URL建立连接.这个url不是项目的控制器/动作,只是js文件中内置的SignalR代码. jquery.signalR-2.2.1.js
我们刚开始在MVC应用程序中使用SignalR,现在由于平均响应时间很长,我们得到了一堆警报.我怀疑这会误导,因为应用程序没有遇到性能下降. SignalR似乎使用此URL建立连接.这个url不是项目的控制器/动作,只是js文件中内置的SignalR代码. jquery.signalR-2.2.1.js是该文件.我怀疑它只是在他们在这个页面上时打开websocket连接并且它正在扭曲我们的数字.这准确吗?如果是这样,有没有办法从应用程序见解中过滤掉它?

这是柜台.这是预期的行为吗?

enter image description here

这是signalR jquery代码,它构建了它的url:

// BUG #2953: The url needs to be same otherwise it will cause a memory leak
    getUrl: function (connection,transport,reconnecting,poll,ajaxPost) {
        /// <summary>Gets the url for making a GET based connect request</summary>
        var baseUrl = transport === "webSockets" ? "" : connection.baseUrl,url = baseUrl + connection.appRelativeUrl,qs = "transport=" + transport;

        if (!ajaxPost && connection.groupsToken) {
            qs += "&groupsToken=" + window.encodeURIComponent(connection.groupsToken);
        }

        if (!reconnecting) {
            url += "/connect";
        } else {
            if (poll) {
                // longPolling transport specific
                url += "/poll";
            } else {
                url += "/reconnect";
            }

            if (!ajaxPost && connection.messageId) {
                qs += "&messageId=" + window.encodeURIComponent(connection.messageId);
            }
        }
        url += "?" + qs;
        url = transportLogic.prepareQueryString(connection,url);

        if (!ajaxPost) {
            url += "&tid=" + Math.floor(Math.random() * 11);
        }

        return url;
    },

解决方法

我按照 https://docs.microsoft.com/en-us/azure/application-insights/app-insights-api-filtering-sampling上的说明修复了这个问题:

>将ApplicationInsights Nuget包更新到2.0.0或更高版本.
>创建一个实现ITelemetryProcessor的类:

public class UnwantedTelemetryFilter : ITelemetryProcessor
    {
        private ITelemetryProcessor Next { get; set; }

        public UnwantedTelemetryFilter(ITelemetryProcessor next)
        {
            this.Next = next;
        }

        public void Process(ITelemetry item)
        {
            var request = item as RequestTelemetry;

            if (request != null && request.Name != null)
                if (request.Name.Contains("signalr"))
                    return;

            // Send everything else:
            this.Next.Process(item);
        }
    }

>将处理器添加到Global.asax.cs中的Application_Start():

var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder;
    builder.Use((next) => new UnwantedTelemetryFilter(next));
    builder.Build();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读