Pap*_*ndy 5 asp.net-mvc websocket signalr azure-application-insights
我们刚刚开始在MVC应用程序中使用SignalR,由于平均响应时间长,现在我们收到大量警报。我怀疑这会引起误导,因为应用程序没有出现性能下降的情况。似乎SignalR使用此URL建立连接。这个网址不是项目的控制器/动作,而是js文件中的内置SignalR代码。jquery.signalR-2.2.1.js是文件。我怀疑当他们在此页面上时,只是使websocket连接保持打开状态,并且歪曲了我们的数字。这个准确吗?如果是这样,是否有办法从应用程序见解中过滤掉它?
这是柜台。 这是预期的行为吗?
这是构建URL的signalR jQuery代码:
// 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;
},
Run Code Online (Sandbox Code Playgroud)
我按照https://docs.microsoft.com/zh-cn/azure/application-insights/app-insights-api-filtering-sampling上的说明进行了修复:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
Application_Start()中Global.asax.cs: var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder;
builder.Use((next) => new UnwantedTelemetryFilter(next));
builder.Build();
Run Code Online (Sandbox Code Playgroud)
如果调用来自应用程序的 C# 部分,最简单的方法是编写自定义遥测处理器: https://learn.microsoft.com/en-us/azure/application-insights/app-insights-api-过滤采样
public void Process(ITelemetry item)
{
var request = item as RequestTelemetry;
if (request != null && request.[some field here].Equals("[some signalr specific check here]", StringComparison.OrdinalIgnoreCase))
{
// To filter out an item, just terminate the chain:
return;
}
// Send everything else:
this.Next.Process(item);
}
Run Code Online (Sandbox Code Playgroud)
并使用它来显式过滤掉发送的信号器调用
或者如果调用来自 JS,那么如果您在初始化程序中返回 false,则遥测初始化程序会执行类似的操作来过滤掉遥测数据。
| 归档时间: |
|
| 查看次数: |
1309 次 |
| 最近记录: |