Я пытался использовать следующий код:
В файле Startup.cs
public class Startup {
public void ConfigureServices(IServiceCollection services) {
services.AddSingleton < IMiddleware, MyTelemetryMiddleware > ();
services.AddSingleton < IBotTelemetryClient, MyBotTelemetryClient > ();
}
}
ниже класса, который я создал:
public class MyTelemetryMiddleware: TelemetryLoggerMiddleware {
public IBotTelemetryClient _telemetryClient;
public bool _logPersonalInformation {
get;
}
public MyTelemetryMiddleware(IBotTelemetryClient botTelemetryClient, bool value = true): base(botTelemetryClient, true) {
_telemetryClient = botTelemetryClient;
_logPersonalInformation = true;
}
protected override async Task OnReceiveActivityAsync(
Activity activity,
CancellationToken cancellation) {
// Fill in the "standard" properties for BotMessageReceived
// and add our own property.
var properties = FillReceiveEventProperties(activity,
new Dictionary < string, string > {
{
"MyImportantProperty",
"myImportantValue"
}
});
// Use TelemetryClient to log event
TelemetryClient.TrackEvent(
TelemetryLoggerConstants.BotMsgReceiveEvent,
properties);
}
private Dictionary < string, string > FillReceiveEventProperties(Activity activity, Dictionary < string, string > value) {
var properties = new Dictionary < string,
string > () {
{
TelemetryConstants.FromIdProperty, activity.From.Id
}, {
TelemetryConstants.ConversationNameProperty,
activity.Conversation.Name
}, {
TelemetryConstants.LocaleProperty,
activity.Locale
}, {
TelemetryConstants.RecipientIdProperty,
activity.Recipient.Id
}, {
TelemetryConstants.RecipientNameProperty,
activity.Recipient.Name
},
};
// Use the LogPersonalInformation flag to toggle logging PII data, text and user name are common examples
if (_logPersonalInformation) {
if (!string.IsNullOrWhiteSpace(activity.From.Name)) {
properties.Add(TelemetryConstants.FromNameProperty, activity.From.Name);
}
if (!string.IsNullOrWhiteSpace(activity.Text)) {
properties.Add(TelemetryConstants.TextProperty, activity.Text);
}
if (!string.IsNullOrWhiteSpace(activity.Speak)) {
properties.Add(TelemetryConstants.SpeakProperty, activity.Speak);
}
}
return properties;
}
}
Во время выполнения кодаВ соответствии с документацией, представленной на сайте Microsoft, вышеупомянутый класс телеметрии должен получить удар.Я пробовал много раз другим способом, но этот класс не получил удар, и поток идет прямо к самому классу бота.Хотя я внедрил этот класс журнала телеметрии промежуточного программного обеспечения в файле Startup.cs.