2

我在 Azure 门户中的网络聊天测试模拟器上遇到了我认为可能是 HeroCards 的缓存问题。由于 Cortana 不支持 AdaptiveCard,为了完全调试我的机器人,我暂时将 AdaptiveCard 渲染为图像,然后将图像添加到 HeroCard。然后我将 HeroCard 作为附件添加到回复中。

我发现如果我在网络聊天中的 Azure 测试中键入第一个问题 (A),模拟器中会显示正确的图像,但是如果我问不同的问题 (B),则会显示同一张卡片。我可以看到图像在我的缓存图像文件夹中发生了变化,但无法弄清楚为什么卡总是相同的。

我在卡片标题上添加了时间戳,以证明它不是同一张卡片。这是我来自问题 A 的代码。问题 B 的代码仅在生成的 AdaptiveCard 中有所不同。

    SingleDayCompactCard card = new SingleDayCompactCard(p1, p2, p3);
    // Start of temporary code
    Activity reply = activity.CreateReply();
    reply.Attachments = new List<Attachment>();
    Attachment attachment = await AdaptiveCardToHeroAttachment(card);
    reply.Attachments.Add(attachment);
    // end of temporary code - remove when Cortana supports Adaptive cards
    ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
    await connector.Conversations.ReplyToActivityAsync(reply);


    async Task<Attachment> AdaptiveCardToHeroAttachment(AdaptiveCard card)
    {
        AdaptiveHostConfig hostConfig = new AdaptiveHostConfig()
        {
            SupportsInteractivity = false
        };

        string path = HttpContext.Current.Request.MapPath(@"\cache\temp.png");

        // Create a renderer
        AdaptiveCardRenderer renderer = new AdaptiveCardRenderer(hostConfig);
        RenderedAdaptiveCardImage raci = null;
        try
        {
            AdaptiveCardParseResult parseResult = AdaptiveCard.FromJson(card.ToJson());
            AdaptiveCard c = parseResult.Card;
            raci =
                await renderer.RenderCardToImageAsync(c, true);
        }
        catch (Exception e)
        {

        }

        using (System.IO.FileStream output = new System.IO.FileStream(path, FileMode.Create, FileAccess.Write))
        {
            await raci.ImageStream.CopyToAsync(output);
            await output.FlushAsync();
            output.Close();
        }

        HeroCard hero = new HeroCard();
        hero.Title = DateTime.Now.ToLongTimeString();
        hero.Images.Add(new CardImage("http://localhost:3979/cache/temp.png"));
        return hero.ToAttachment();
    }
4

1 回答 1

0

非常感谢埃里克

关闭浏览器缓存不起作用,但使用 base64 编码图像的第二个建议起到了作用。

我删除了这段代码,并将其替换为 base64 编码图像链接中的代码

        HeroCard hero = new HeroCard();
        hero.Title = DateTime.Now.ToLongTimeString();
        hero.Images.Add(new CardImage("http://localhost:3979/cache/temp.png"));
        return hero.ToAttachment();

所以这条线一定是罪魁祸首

CardImage(" http://localhost:3979/cache/temp.png "));

再次感谢

于 2018-01-13T18:39:29.597 回答