2016-06-08 6 views
2

Ich versuche, einen einfachen Bot zu schreiben, der LUIS verwendet, aber nach einem Update scheint ein Problem zu haben.Botframe Emulator und 404 Fehler

Also bevor ich den Botbuilder auf 1.1 aktualisierte, hatte ich Probleme, wo Luis.Models nicht gefunden werden konnte. Nach dem Upgrade und Auflösen einer coding error und Entfernen von Microsoft.Bot.Connector.Utilities kann ich erfolgreich kompilieren und ausführen, aber ich kann keine Verbindung über den Emulator herstellen.

Dies ist der Code, den ich verwende.

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

Als ich das Projekt ausführen, startet es ohne Fehler, und ich die Webseite erhalten, die sagt:

MYBot Beschreiben Sie Ihre Bot hier und Ihre Nutzungsbedingungen usw. Besuch Bot-Framework registrieren Dein Bot. Wenn Sie es registrieren, denken Sie daran, bot der Endpunkt https://your_bots_hostname/api/messages

zu setzen, wenn ich den Emulator laufen zu https://localhost/api/messages zeigt, Retuns es „ein Fehler beim Senden der Anforderung“.

JSON ist hier:

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() 

Ich habe gerade HTTP auch versucht (und nicht HTTPS).

+0

Fehle ich ein grundlegendes Stück Code? Ohne LUIS würde ich "public class MessagesController: ApiController" verwenden. Nein, ich versuche "öffentliche Klasse Mybot: LuisDialog " zu verwenden. –

+0

Können Sie den Code Ihres MessageControllers posten? Sie benötigen den MessageController auch dann, wenn Sie LUIS verwenden. –

+0

Danke. Ich habe den Code in den ursprünglichen Beitrag eingefügt. Das ist der gesamte Inhalt meiner MessagesController.cs. –

Antwort

1

Können Sie überprüfen, ob Sie die richtige URL für Ihren Bot verwenden? Überprüfen Sie die Projekt-URL in Ihren Projekteigenschaften und vergewissern Sie sich, dass Sie die richtige Portnummer verwenden. Standardmäßig verwendet die Bot-Framework Projektvorlage http://localhost: /

Project Properties

1

Zwei Dinge, die ich zu sehen bin hier:

  1. Sie https mit localhost verwenden und sollten http (https wenn in Azure gehostet wird)
  2. Der Port ist Mssing

auch y Sie benötigen den MessageController auch dann, wenn Sie LUIS verwenden (basierend auf dem von Ihnen hinzugefügten Kommentar).

Der MessageController empfängt die Nachricht und startet die Konversation durch "Starten" eines Dialogs. In diesem Fall das LUIS-Dialogfeld.

+0

Danke. Ich habe den Code in den ursprünglichen Beitrag eingefügt.Das ist der gesamte Inhalt meiner MessagesController.cs. Ich habe auch HTTP versucht (http: // localhost: 3978/api/messages), und bekomme eine 404 Not Found. –

+0

oh, also enthält Ihre MessageController.cs nur den LUISDialog? Wenn das der Fall ist, dann ist das die Ursache des Problems. Sie benötigen einen MessageController (ein Webapi), der die Nachricht empfängt. Ihr Nachrichtencontroller sollte wie dieser sein github.com/Microsoft/BotBuilder/blob/master/CSharp/Samples/.... Sie werden nur den Dialog ersetzen, der mit Ihrem LUIS-Dialog gestartet wird. –

0

Ich denke, in den Emulator-Endpunkt haben Sie die Port-Nummer verpasst. Und normalerweise ist es http (localhost), aber addieren Sie "s" als "https" für Emulatorurl wie unten. https://localhost:3978/api/messages

+0

Danke. Ich habe versucht, HTTP, HTTPS, mit dem Port, ohne, mit "/ api/messages", und ohne. –