【问题标题】:Microsoft Bot Framework 500 Internal server Error when System.Data Namespace Used使用 System.Data 命名空间时出现 Microsoft Bot Framework 500 内部服务器错误
【发布时间】:2017-02-09 20:19:06
【问题描述】:

我正在尝试使用 System.Data.DataTable 来解析会话期间附加的 Excel 文档并将其复制到 DataTable 以便使用 BotFramefork 对话框进行进一步处理。

使用“System.Data”命名空间且无法发送消息时出现“500 InternalServerError”。

我已经尝试在 Github 的以下示例上使用模拟器在本地运行它

https://github.com/jamesemann/intro-to-botframework5-dialogsrefactored

对于相同的示例,如果包含“System.Data.DataTable”,则模拟器中存在 500 Internal Server Error。

[Serializable]
public class AdditionDialog : IDialog<object>
{
    protected int number1 { get; set; }


   /* Error When Included Below line*/
System.Data.DataTable dt = new System.Data.DataTable();


    public async Task StartAsync(IDialogContext context)
    {

        await context.PostAsync("Provide number one:");

        context.Wait(MessageReceivedAddNumber1);
    }

    public async Task MessageReceivedAddNumber1(IDialogContext context, IAwaitable<IMessageActivity> argument)
    {
        var numbers = await argument;
        // number one is persisted between messages automatically by bot framework dialog
        this.number1 = int.Parse(numbers.Text);
        await context.PostAsync("Provide number two:");

        context.Wait(MessageReceivedAddNumber2);
    }

    public async Task MessageReceivedAddNumber2(IDialogContext context, IAwaitable<IMessageActivity> argument)
    {
        var numbers = await argument;
        var number2 = int.Parse(numbers.Text);
        await context.PostAsync($"{this.number1} + {number2} is = {this.number1 + number2}");

        context.Done<object>(new object());
    }

任何人都可以建议我是否在这里遗漏任何东西。

【问题讨论】:

    标签: c# bots botframework botbuilder


    【解决方案1】:

    问题在于DataTable 不可序列化,因此您不能在对话框中为无法序列化的内容保留引用,因为在每次交互中,对话框状态都在被序列化。

    如果您添加[NonSerialized] 属性,您会看到对话框执行得很好,但这会有其他含义。

    [NonSerialized]
    System.Data.DataTable dt = new System.Data.DataTable();
    

    不确定您为什么要尝试在对话框中使用DataTable,但我的建议是将其封装到您可以拥有的服务中,并确保该服务是可序列化的,并且您不持有对事物的引用不能被序列化。

    查看this 了解有关处理不可序列化服务的更多信息。

    【讨论】:

    • 感谢@EzequielJadib 提供的信息。这很有帮助:-)
    • 我正在使用 shell 脚本调用新进程“System.Diagnostics.ProcessStartInfo”,并尝试使用 OutputDataReceived 将其重定向到对话。 @Ezequiel 你能建议我如何做到这一点。我之前已经通过将 WPF c# 输出重定向到文本框来完成此操作。提前致谢。
    • 嗯...您可能需要查看 ProactiveMessages... 请参阅github.com/MicrosoftDX/botFramework-proactiveMessages
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 2016-06-23
    • 2023-03-10
    相关资源
    最近更新 更多