You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When I build/start the dockerized .NET Core bot, the default web landing page works as expected, but I'm unable to open a connection to the bot in an emulator. When I launch the emulator using your .bot file, the emulator hits the bot, but when it tries to create a new Conversation, it's unable to do so:
stacktrace:
fail: Microsoft.AspNetCore.Server.Kestrel[13]
Connection id "0HLNMAL3S1AGJ", Request id "0HLNMAL3S1AGJ:00000001": An unhandled exception was thrown by the application.
System.Net.Http.HttpRequestException: Cannot assign requested address ---> System.Net.Sockets.SocketException: Cannot assign requested address
at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
at System.Threading.Tasks.ValueTask`1.get_Result()
at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Threading.Tasks.ValueTask`1.get_Result()
at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)
at System.Threading.Tasks.ValueTask`1.get_Result()
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at Microsoft.Rest.RetryAfterDelegatingHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at Microsoft.Rest.RetryDelegatingHandler.<>c__DisplayClass11_0.<<SendAsync>b__1>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.Rest.RetryDelegatingHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at Microsoft.Bot.Connector.Conversations.ReplyToActivityWithHttpMessagesAsync(String conversationId, String activityId, Activity activity, Dictionary`2 customHeaders, CancellationToken cancellationToken)
at Microsoft.Bot.Connector.ConversationsExtensions.ReplyToActivityAsync(IConversations operations, String conversationId, String activityId, Activity activity, CancellationToken cancellationToken)
at Microsoft.Bot.Builder.BotFrameworkAdapter.SendActivitiesAsync(ITurnContext turnContext, Activity[] activities, CancellationToken cancellationToken)
at Microsoft.Bot.Builder.TurnContext.<>c__DisplayClass22_0.<<SendActivitiesAsync>g__SendActivitiesThroughAdapter|1>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.Bot.Builder.TurnContext.SendActivityAsync(IActivity activity, CancellationToken cancellationToken)
at Microsoft.Bot.Builder.TurnContext.SendActivityAsync(String textReplyToSend, String speak, String inputHint, CancellationToken cancellationToken)
at Microsoft.BotBuilderSamples.Startup.<>c__DisplayClass6_1.<<ConfigureServices>b__5>d.MoveNext() in /app/Startup.cs:line 106
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.Bot.Builder.BotAdapter.RunPipelineAsync(ITurnContext turnContext, BotCallbackHandler callback, CancellationToken cancellationToken)
at Microsoft.Bot.Builder.BotFrameworkAdapter.ProcessActivityAsync(ClaimsIdentity identity, Activity activity, BotCallbackHandler callback, CancellationToken cancellationToken)
at Microsoft.Bot.Builder.BotFrameworkAdapter.ProcessActivityAsync(String authHeader, Activity activity, BotCallbackHandler callback, CancellationToken cancellationToken)
at Microsoft.Bot.Builder.Integration.AspNet.Core.Handlers.BotMessageHandler.ProcessMessageRequestAsync(HttpRequest request, BotFrameworkAdapter botFrameworkAdapter, BotCallbackHandler botCallbackHandler, CancellationToken cancellationToken)
at Microsoft.Bot.Builder.Integration.AspNet.Core.Handlers.BotMessageHandlerBase.HandleAsync(HttpContext httpContext)
at Microsoft.AspNetCore.Builder.Extensions.MapMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Request finished in 5.6214ms 500
I think it might be because the "endpoint" in the .bot doesn't play nice in a dockerized environment, but maybe I'm off on that? When I hop into the container with docker exec <name> -it /bin/bash and try to hit the endpoint specified in the .bot file, I can't establish a connection ( curl http://localhost:8000/api/messages)... but I'm not surprised by that, because 8000 is the port used on the docker host, NOT the container's localhost...
So, now we have a problem: we read in the .bot config to configure the bot in the source but that .bot file is meant for the docker host's use. Am I on the right path here? If I am, there should probably be a *.docker.bot file that the app uses when configuring itself in docker (a change to startup.cs). Thoughts?
The text was updated successfully, but these errors were encountered:
I ran into this today and found that the error was because the bot tries to post back to the emulator using the serviceurl which is "localhost" - and localhost inside docker means the docker container and not the host. To work around this you can set the localhost override to host.docker.internal in the emulator settings.
Hi ovishesh, thanks for this example!
When I build/start the dockerized .NET Core bot, the default web landing page works as expected, but I'm unable to open a connection to the bot in an emulator. When I launch the emulator using your
.bot
file, the emulator hits the bot, but when it tries to create a new Conversation, it's unable to do so:stacktrace:
I think it might be because the "endpoint" in the
.bot
doesn't play nice in a dockerized environment, but maybe I'm off on that? When I hop into the container withdocker exec <name> -it /bin/bash
and try to hit the endpoint specified in the.bot
file, I can't establish a connection (curl http://localhost:8000/api/messages
)... but I'm not surprised by that, because8000
is the port used on the docker host, NOT the container's localhost...So, now we have a problem: we read in the
.bot
config to configure the bot in the source but that.bot
file is meant for the docker host's use. Am I on the right path here? If I am, there should probably be a*.docker.bot
file that the app uses when configuring itself in docker (a change tostartup.cs
). Thoughts?The text was updated successfully, but these errors were encountered: