无法使用IActivityLogger和Bot Builder for C#

时间:2017-04-11 13:50:33

标签: c# inversion-of-control botframework

我需要在用户和机器人之间记录消息。经过一些研究后,我发现sGambolati的这篇文章解释了如何实现这一目标:https://stackoverflow.com/a/42145416

然而,这种方法对我来说似乎并不适用。我甚至尝试了他提供的相同片段,但我仍然没有在调试输出窗口中看到日志。

以下是根据其实施的代码:

记录器类:

public class DebugActivityLogger : IActivityLogger
{
    public async Task LogAsync(IActivity activity)
    {
        Debug.WriteLine($"From:{activity.From.Id} - To:{activity.Recipient.Id} - Message:{activity.AsMessageActivity()?.Text}");
    }
}

我的Global.asax:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);

        var builder = new ContainerBuilder();
        builder.RegisterType<DebugActivityLogger>()
            .AsImplementedInterfaces()
            .InstancePerDependency();
        builder.Update(Conversation.Container);
    }
}

控制器中的标准回波样本:

public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
    if (activity.Type == ActivityTypes.Message)
    {
        ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
        int length = (activity.Text ?? string.Empty).Length;
        Activity reply = activity.CreateReply($"You sent {activity.Text} which was {length} characters");
        await connector.Conversations.ReplyToActivityAsync(reply);
    }

    var response = Request.CreateResponse(HttpStatusCode.OK);
    return response;
}

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

IActivityLogger实施将记录通过IPostToBot / IBotToUser实施的传入/传出消息。在这种情况下,LogPostToBotLogPostToUser实现负责调用IActivityLogger实现。

所有这些介绍,只是为了让您知道,如果您使用connector.Conversations.ReplyToActivityAsync,则无法点击IActivityLogger。要点击记录器,您需要一个IDialog来接收来自用户的消息,您需要使用context.PostAsync将来自机器人的消息记录到用户。

查看core-Middleware C#示例,看看这是否有效。