C# Azure服务的.Net核心异步方法
我已经创建了一个带有Azure连接服务的ASP Net Core(2.0)Web应用程序,在localhost上进行测试时,该应用程序工作正常,但发布到IIS时会抛出以下错误: 处理请求时发生未处理的异常。SocketException:连接尝试期间发生错误,原因是连接方在一段时间后没有正确响应,或者由于连接主机无法响应而在建立的连接中发生错误40.112.254.71:443 我将一个txt文件从视图发布到控制器并发送到Azure服务进行分析,这是post方法:C# Azure服务的.Net核心异步方法,c#,azure,asp.net-core,async-await,C#,Azure,Asp.net Core,Async Await,我已经创建了一个带有Azure连接服务的ASP Net Core(2.0)Web应用程序,在localhost上进行测试时,该应用程序工作正常,但发布到IIS时会抛出以下错误: 处理请求时发生未处理的异常。SocketException:连接尝试期间发生错误,原因是连接方在一段时间后没有正确响应,或者由于连接主机无法响应而在建立的连接中发生错误40.112.254.71:443 我将一个txt文件从视图发布到控制器并发送到Azure服务进行分析,这是post方法: [HttpPost("Anal
[HttpPost("Analyze_v2")]
public JsonResult Analyze_v2(IFormFile archivo)
{
List<string> result = new List<string>();
using (var reader = new StreamReader(archivo.OpenReadStream()))
{
while (reader.Peek() >= 0)
result.Add(reader.ReadLine());
}
List<TextAnalyzeModel> data = new List<TextAnalyzeModel>();
for (int i = 0; i < result.Count; i++)
{
TextAnalyzeModel model = new TextAnalyzeModel();
model.TextStr = result.ElementAt(i);
if (!string.IsNullOrWhiteSpace(model.TextStr))
{
ITextAnalyticsAPI client = this.GetTextAnalyzeClient(new AsyncHandler());
model.LanguageAnalyzeResult = client.DetectLanguage(
new BatchInput(
new List<Input>()
{
new Input(i.ToString(),model.TextStr)
}));
model.SentimentAnalyzeResult = client.Sentiment(
new MultiLanguageBatchInput(
new List<MultiLanguageInput>()
{
new MultiLanguageInput(
model.LanguageAnalyzeResult.Documents[0].DetectedLanguages[0].Iso6391Name,
i.ToString(),
model.TextStr)
}));
data.Add(model);
}
}
return Json(data);
}
这是AsyncHandler类:
class AsyncHandler : DelegatingHandler
{
protected async override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
// Call the inner handler.
var response = await base.SendAsync(request, cancellationToken);
return response;
}
}
类异步处理程序:DelegatingHandler
{
受保护的异步覆盖任务SendAsync(
HttpRequestMessage请求,System.Threading.CancellationToken CancellationToken)
{
//调用内部处理程序。
var response=await base.sendaync(请求、取消令牌);
返回响应;
}
}
我在不同的端口和相同的问题上进行了测试,在localhost上运行良好,发布时抛出异常。
任何想法都会有帮助。登录IIS所在的服务器,并尝试在443上远程登录到40.112.254.71。如果您没有得到响应,这意味着流量被阻塞(网络规则),并且不依赖于您的应用程序 如果响应确实发生,但经过一段时间后,请确保已充分设置响应超时:
<aspNetCore requestTimeout="00:20:00" processPath=“%LAUNCHER_PATH%” arguments=“%LAUNCHER_ARGS%” stdoutLogEnabled=“false” stdoutLogFile=“.\logs\stdout” />
我试过了,没用。这是用于传出请求还是传入请求?我发现它设置了向IIS发送请求的时间,而不是等待响应的时间。@g4b0.88您是第一次尝试telnetting吗?如果您不能telnet,那么响应超时配置的数量将无关紧要。在我的开发计算机(我使用IIS express运行项目的地方)中,我安装了IIS 7,在IIS express中,我没有遇到任何问题,但部署到IIS7时,我就遇到了该错误。不,我没有尝试远程登录,怎么做?
<aspNetCore requestTimeout="00:20:00" processPath=“%LAUNCHER_PATH%” arguments=“%LAUNCHER_ARGS%” stdoutLogEnabled=“false” stdoutLogFile=“.\logs\stdout” />