2017-07-05 1 views
0

J'ai utilisé IIS pour héberger localement mon bot comme ceci: https: // localhost/MyBot. Actuellement, lorsque j'essaie de me connecter à mon bot dans l'émulateur de bot, j'obtiens une erreur POST 500 et je suis incapable d'envoyer des messages. Je suis nouveau à cela et la plupart de la documentation pour la publication d'un bot à un serveur local est limitée. Je peux cependant ouvrir ce lien avec succès depuis mon navigateur. Est-ce que je rencontre cette erreur parce que je n'ai pas le répertoire https: // localhost/Bridget/api/messages/url? J'ai essayé de créer des répertoires virtuels dans IIS mais cela n'a pas aidé à résoudre mon problème. Ai-je besoin d'un logiciel de tunnellisation? Existe-t-il un didacticiel simple permettant de déployer localement un bot en utilisant IIS et de s'y connecter via l'émulateur de bot?POST 500 Erreur Bot Emulator Localhost pour Bot hébergé IIS

Voici l'erreur que je vois dans l'émulateur:

Bot Emulator Error

Utilisation d'un logiciel à effet tunnel ngrok ce que je vois:

NGROK Bot Emulator Error

Voici le code que le traitement POST entrant messages:

/// <summary> 
/// POST: api/Messages 
/// Receive a message from a user and reply to it 
/// </summary> 
public async Task<HttpResponseMessage> Post([FromBody]Activity activity) 
{ 
    if (activity.Type == ActivityTypes.Message) 
    { 
     // Strip any @mentions 
     Mention[] m = activity.GetMentions(); 
     for (int x = 0; x < m.Length; x++) 
     { 
      if (m[x].Mentioned.Id == activity.Recipient.Id) 
      { 
       if (m[x].Text != null) 
       { 
        activity.Text = activity.Text.Replace(m[x].Text, ""); 
       } 
      } 
     } 

     await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); 

     await Conversation.SendAsync(activity,() => new Dialogs.RootDialog()); 
    } 
    else if (activity.Type == ActivityTypes.Invoke) 
    { 
      // Some Code... 
    } 
    else 
    { 
     HandleSystemMessage(activity); 
    } 
    var response = Request.CreateResponse(HttpStatusCode.OK); 
    return response; 
} 
+0

bot Vous pouvez être contacté que vous obtenez le 'conversationUpdate' dans l'émulateur il est donc une bonne chose, maintenant vous avez des problèmes avec le traitement/répondre à un message entrant. Peut-être que vous devriez essayer de répondre avec un écho de base en premier. Et peut-être connecter l'exception sur un fichier ou quelque part, afin de pouvoir voir quelles sont ces erreurs du "côté serveur" –

Répondre

0

J'ai corrigé le problème, car IIS n'autorisait pas les requêtes POST. Tout ce que je faisais était aller à la demande de filtrage et ajouté le verbe POST:

IIS POST Fix

0

Est-ce que je rencontre cette erreur parce que je n'ai pas le répertoire https: // localhost/Bridget/api/messages/url?

Les deux vos captures d'écran vous montre essayez de vous connecter à /api/messages, que vous dites que vous n'avez pas, si naturellement, vous allez obtenir une erreur.

Veuillez poster la partie de votre code de bot pour montrer où vous écoutez les messages. Par exemple, un robot NodeJS aurait quelque chose comme:

var server = restify.createServer(); 
server.listen(process.env.port || process.env.PORT || 3978,() => { 
    console.log('%s listening to %s', server.name, server.url); 
}); 

var connector = new builder.ChatConnector({ 
    appId: process.env.MICROSOFT_APP_ID, 
    appPassword: process.env.MICROSOFT_APP_PASSWORD 
}); 
var bot = new builder.UniversalBot(connector); 
server.post('/api/messages', connector.listen()); 

La dernière ligne montre l'écoute de connexion pour un message à /api/messages dans l'application en cours (en cours d'exécution par NodeJS en utilisant la bibliothèque restify). Qu'est-ce que tu as?

+0

J'ai été en mesure de se connecter, mais maintenant je reçois une erreur 405 dans l'émulateur de bot. Ci-dessus montre le code inclus de Microsoft qui gère les messages. J'utilise le SDK de structure de bot. Je l'ai publié dans un fichier, puis j'ai utilisé IIS pour créer un lien localhost. Maintenant, j'essaie d'y accéder via l'émulateur de cette façon. Je ne pense pas que je devrais avoir à créer un répertoire virtuel appelé api/messages ... – Megan

+0

Avez-vous modifié votre routage à tous? Quel est le nom de votre fichier de contrôleur? Par défaut, il doit s'agir de MessagesController.cs, et si vous n'avez pas modifié la route, votre route par défaut sera _ '/ api/messages'. Êtes-vous capable de l'exécuter dans Visual Studio sans avoir d'erreurs? Pour les erreurs 405 dans l'API Web, vous devrez peut-être jeter un coup d'œil à [this] (https://docs.microsoft.com/en-us/aspnet/web-api/overview/testing-and-debugging/troubleshooting-http -405-erreurs-après-publication-web-api-applications). –

+0

Lorsque vous publiez le bot, il génère un dossier qui n'inclut pas le fichier MessagesController.cs, mais oui, il est correctement nommé. [Voici une photo du problème auquel je suis confronté] (https://user-images.githubusercontent.com/8683055/27881854-d5a863da-618f-11e7-8114-dc903212daa2.PNG) Pour une raison quelconque, je peux me connecter au bot mais je ne peux pas envoyer de requêtes POST? – Megan