Botframework仿真器和404错误

Botframework仿真器和404错误,botframework,Botframework,我正在尝试编写一个使用LUIS的简单机器人,但在更新之后似乎遇到了问题 因此,在将Botbuilder更新为1.1之前,我遇到了无法找到Luis.Models的问题。升级、解决a并删除Microsoft.Bot.Connector.Utilities后,我可以成功编译并运行,但无法通过仿真器连接 这是我正在使用的代码 using System; using System.Linq; using System.Net; using System.Net.Http; using System.Thr

我正在尝试编写一个使用LUIS的简单机器人,但在更新之后似乎遇到了问题

因此,在将Botbuilder更新为1.1之前,我遇到了无法找到Luis.Models的问题。升级、解决a并删除Microsoft.Bot.Connector.Utilities后,我可以成功编译并运行,但无法通过仿真器连接

这是我正在使用的代码

using System;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.Description;
using System.Collections.Generic;
using Microsoft.Bot.Connector;
using Microsoft.Bot.Builder.Dialogs;
//using Microsoft.Bot.Connector.Utilities;
using Microsoft.Bot.Builder.Luis;
using Microsoft.Bot.Builder.Luis.Models;
using Newtonsoft.Json;

[LuisModel("c413b2ef-382c-45bd-8ff0-f76d60e2a821", "6d0966209c6e4f6b835ce34492f3e6d9")]
[Serializable]
public class Mybot : LuisDialog<object>
{

    [LuisIntent("")]
    public async Task None(IDialogContext context, LuisResult result)
    {
        string message = "I'm sorry I didn't understand. Try asking about your bill.";
        await context.PostAsync(message);
        context.Wait(MessageReceived);
    }

    [LuisIntent("NextInvoiceDate")]
    public async Task NextInvoiceDate(IDialogContext context, LuisResult result)
    {
        string message = "Your next payment will go out on the 17th of the month.";
        await context.PostAsync(message);
        context.Wait(MessageReceived);
    }

    [LuisIntent("NextAmount")]
    public async Task NextAmount(IDialogContext context, LuisResult result)
    {
        string message = $"Your next amount is expected to be around £29.72.";
        await context.PostAsync(message);
        context.Wait(MessageReceived);
    }
}
使用系统;
使用System.Linq;
Net系统;
使用System.Net.Http;
使用System.Threading.Tasks;
使用System.Web.Http;
使用System.Web.Http.Description;
使用System.Collections.Generic;
使用Microsoft.Bot.Connector;
使用Microsoft.Bot.Builder.Dialogs;
//使用Microsoft.Bot.Connector.Utilities;
使用Microsoft.Bot.Builder.Luis;
使用Microsoft.Bot.Builder.Luis.Models;
使用Newtonsoft.Json;
[LuisModel(“c413b2ef-382c-45bd-8ff0-f76d60e2a821”、“6D0966209C6E4F6B835CE3449F3E6D9”)]
[可序列化]
公共类Mybot:LuisDialog
{
[路易辛顿(“”)
公共异步任务无(IDialogContext上下文,LuisResult结果)
{
string message=“对不起,我不明白。试着问一下您的账单。”;
等待上下文。PostAsync(消息);
Wait(MessageReceived);
}
[路易辛顿(“下一个语音日期”)]
公共异步任务NextInvoiceDate(IDialogContext上下文,LuisResult结果)
{
string message=“您的下一笔付款将于本月17日支付。”;
等待上下文。PostAsync(消息);
Wait(MessageReceived);
}
[路易辛顿(“下一座山”)]
公共异步任务NextAmount(IDialogContext上下文,LuisResult结果)
{
字符串消息=$“您的下一笔金额预计约为29.72英镑。”;
等待上下文。PostAsync(消息);
Wait(MessageReceived);
}
}
当我运行项目时,它会毫无错误地启动,我会看到一个网页,上面写着:

MYBot 在这里描述你的机器人和你的使用条款等。 访问Bot框架以注册您的Bot。注册时,请记住将bot的端点设置为

当我运行指向的模拟器时,它会重新运行“发送请求时出错”

JSON在这里:

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:443
   at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)
   at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)
   --- End of inner exception stack trace ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at Microsoft.Bot.Connector.Emulator.ConversationModel.<SendMessageAsync>d__50.MoveNext() 
System.Net.Http.HttpRequestException:发送请求时出错。-->System.Net.WebException:无法连接到远程服务器-->System.Net.Sockets.SocketException:无法建立连接,因为目标计算机主动拒绝了它127.0.0.1:443
位于System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
在System.Net.ServicePoint.ConnectSocketInternal(布尔连接失败、套接字s4、套接字s6、套接字和套接字、IPAddress和address、ConnectSocketState状态、IAsyncResult asyncResult、异常和异常)
---内部异常堆栈跟踪的结束---
位于System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult、TransportContext和context)
位于System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)
---内部异常堆栈跟踪的结束---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()中
在Microsoft.Bot.Connector.Emulator.ConversationModel.d_u50.MoveNext()中

我也尝试了HTTP(而不是HTTPS)。

你能检查一下你的机器人是否使用了正确的url吗?检查项目属性中的项目url,并确保使用正确的端口号。默认情况下,Bot框架项目模板使用:3978/


我在这里看到两件事:

  • 您正在将https与localhost一起使用,并且应该是http(https在Azure中托管时为http)
  • 港口正在下沉
  • 此外,即使使用LUIS,您仍然需要MessageController(这基于您添加的注释)


    MessageController将接收消息并通过“启动”对话框启动对话。在本例中,您的LUIS对话框。

    我认为在emulator端点中,您错过了端口号。通常是http(localhost),但为emulator url添加“s”作为“https”,如下所示<代码>https://localhost:3978/api/messages

    我是否缺少一段基本的代码?如果没有LUIS,我将使用“公共类MessagesController:ApicController”。不,我正在尝试使用“公共类Mybot:LuisDialog”。你能发布你的MessageController的代码吗?即使使用LUIS,您仍然需要MessageController。谢谢。我已经把代码放在原来的帖子里了。这就是我的MessagesController.cs的全部内容。在使用Bot Framework Emulator时,我还遇到了一个407错误!虽然命令行版本可以正常工作,但无法解释JSON,这很烦人,也很难看。谢谢。我已经把代码放在原来的帖子里了。这是我的MessagesController.cs的全部内容。我也尝试了HTTP(),但没有找到404。哦,那么你的MessageController.cs只包含LUISDialog?如果是这样,那就是问题的根本原因。您需要一个接收消息的MessageController(webapi)。您的消息控制器应该是这样的:github.com/Microsoft/BotBuilder/blob/master/CSharp/Samples/…。您只需将它正在启动的对话框替换为您的LUIS dialog即可。谢谢。我尝试过HTTP、HTTPS、带端口、不带端口、带“/api/messages”和不带端口。