2017-02-09 81 views
0

我试图使用System.Data.DataTable解析会话期间附加的Excel文档并将其复制到DataTable,以便使用BotFramefork对话框进一步处理。Microsoft Bot Framework 500内部服务器使用System.Data命名空间时出错

当使用“System.Data”命名空间且未能发送消息时,会出现“500 InternalServerError”。

我已经从GitHub试过下面的示例如果包含“System.Data.DataTable”来运行本地与仿真

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

对同一样品,有一个500内部服务器错误在模拟器中。

[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()); 
    } 

任何人都可以建议,如果我失去了什么在这里。

回答

2

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

如果添加[NonSerialized]属性,您将看到该对话框执行得很好,但这会产生其他影响。

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

不知道为什么你正在尝试在一个对话框中使用DataTable,但我的建议是来封装到你可以根据自己的业务,并确保该服务是可序列化一个你不持有引用事情不能被序列化。

有关处理非序列化服务的更多信息,请参阅this

+1

感谢@EzequielJadib的info.This是有帮助的:-) – user2092402

+0

我用shell脚本调用新进程“System.Diagnostics.ProcessStartInfo”,并尝试使用OutputDataReceived将其重定向到对话。 @Ezequiel你能否提出建议我如何实现这一目标。我已经做了这个与WPF c#输出重定向到文本框。提前致谢。 – user2092402

+0

嗯...你可能不得不看ProactiveMessages ...看到https://github.com/MicrosoftDX/botFramework-proactiveMessages –