用于IIS托管Bot的POST 500错误Bot仿真器Localhost

时间:2017-07-05 17:46:04

标签: iis emulation botframework

我已经使用IIS来本地托管我的机器人:https:// localhost / MyBot。目前,当我尝试在bot模拟器中连接到我的机器人时,我收到POST 500错误,并且无法发送消息。我是新手,大多数将bot发布到本地服务器的文档都是有限的。但是,我可以从浏览器中成功打开此链接。

我是否遇到此错误,因为我没有https:// localhost / Bridget / api / messages目录/ url?我尝试在IIS中创建虚拟目录,但这无助于解决我的问题。我需要隧道软件吗?是否有一个简单的教程,用于使用IIS在本地部署bot并通过bot模拟器连接到它?

以下是我在模拟器中看到的错误:

Bot Emulator Error

使用ngrok隧道软件,这就是我所看到的:

NGROK Bot Emulator Error

以下是处理传入POST消息的代码:

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

2 个答案:

答案 0 :(得分:0)

  

我是否遇到此错误,因为我没有https:// localhost / Bridget / api / messages目录/ url?

你的截图都显示你试图连接/api/messages,你说你没有,所以很自然,你会得到一个错误。

请发布您的机器人代码部分,以显示您正在收听消息的位置。例如,NodeJS bot会有类似的东西:

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

最后一行显示当前应用程序中/api/messages处的连接侦听消息(由NodeJS使用restify库运行)。你有什么?

答案 1 :(得分:0)

我修复了这个问题,原因是IIS不允许POST请求。我所做的就是去请求过滤并添加动词POST:

IIS POST Fix