C# 如何从Microsoft Bot C调用本地API#
一旦部署到Azure上,我就无法从MS Bot(v4)C#进行内部API调用。当使用emulator进行本地测试时,本地API调用工作正常 根据Microsoft支持团队的建议,我已经尝试使用直拨频道进行网络聊天,但没有任何帮助C# 如何从Microsoft Bot C调用本地API#,c#,botframework,C#,Botframework,一旦部署到Azure上,我就无法从MS Bot(v4)C#进行内部API调用。当使用emulator进行本地测试时,本地API调用工作正常 根据Microsoft支持团队的建议,我已经尝试使用直拨频道进行网络聊天,但没有任何帮助 AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false); HttpWebRequest webRequest = Http
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
HttpWebRequest webRequest = HttpWebRequest.CreateHttp(updatedURL);
webRequest.Method = currentStep.StepsServiceCall.Method;
webRequest.ContentType = "application/json";
webRequest.KeepAlive = true;
if (!String.IsNullOrEmpty(currentStep.StepsServiceCall.Headers))
{
string updatedJson = currentStep.InjectPropertyValuesJson(currentStep.StepsServiceCall.Headers, properties);
webRequest.ContentLength = updatedJson.Length;
using (var streamWriter = new StreamWriter(webRequest.GetRequestStream()))
{
streamWriter.Write(updatedJson);
streamWriter.Flush();
streamWriter.Close();
}
}
using (HttpWebResponse response = webRequest.GetResponse() as HttpWebResponse)
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string content = reader.ReadToEnd();
return await currentStep.ProcessResponseText(context, cancellationToken, content);
}
从Azure应用程序服务日志中获取以下错误
Microsoft.Bot.Builder.Integration.AspNet.Core.BotFrameworkHttpAdapter:捕获异常:发送请求时出错。调用WINHTTP\u CALLBACK\u STATUS\u REQUEST\u Error时出现错误12029,“无法建立与服务器的连接”。对我来说,错误消息看起来相当直接,您的Azure应用程序服务无法访问本地API所在的URL。假设API所在的服务器响应ICMP数据包(ping),我将尝试以下操作:
ping
完成应用程序服务>开发工具>高级工具>转到
您是否尝试从当前网络外部打开许可证API?例如,从手机使用3G?如果您在公司网络中,除非有人更改网络配置以允许入站连接,否则Azure将无法访问您的On Permise API。感谢您的回复Paulo。组织网络外部无法访问本地API。Azure需要进行哪些配置才能达到内部API?您好@Sandeep,您需要询问您的IT部门,了解如何将您的API公开给Azure。为了确保您拥有承载API的服务器,他们需要在防火墙和路由级别进行一些配置,以允许外部请求到达您的内部服务器。在极端情况下,对于测试,您总是可以尝试将其用于开发/测试。我不建议在现场使用。谢谢马特的回复。这帮助我了解到,该url无法从Azure访问。然而,在这种情况下,您的方法建议使用Azure Hybrid,这将是付费服务。是否有其他解决方案,我们可以从代码中处理?没问题@Sandeep。问题的关键是API端点不可公开访问,因此添加代码无法解决此问题。你的API基本上需要一个公共DNS条目-你的托管服务将能够提供这一点。在您将API公开到internet之前,您需要进行以下操作:。或者,您可以将IP地址白名单添加到API中,以获取您的IP地址(不推荐)。