Следующий метод работает в наших 3 azure средах и на основной машине разработчика, но на новой машине разработки он выдает ошибку:
Асинхронная операция не может быть выполнена началось в это время. Асинхронные операции могут быть запущены только внутри асинхронного обработчика или модуля или во время определенных событий в жизненном цикле страницы. Если это исключение произошло во время выполнения страницы, убедитесь, что страница помечена как <% @ Page Async = "true"%>.
Я посмотрел в настройках IIS, чтобы увидеть, есть ли Разница, пробные настройки в Visual Studio, единственное различие заключается в том, что на машине, на которой он работает, используется. net framework 4.7 или 4.7.2, тогда как на новой машине работает 4.8.0. Я также пытался установить 4.7.2 на другую машину, но не уверен, что она ее использует, или в этом проблема. Также я бы предпочел (если проблема связана с версией фреймворка) сделать код стабильным для 4.8, но сейчас я все еще озадачен тем, что является причиной проблемы.
У меня есть попытался воссоздать метод как httpclient, так как я мог прочитать, что он был бы более безопасным, чем использование webclient, но мне не удалось это сделать.
WebClient cliWeb;
private void downloadFile(string url, string username, string password, EncodingParser.EncodingFormat encodingFormat, string method, string _importstepguid, string delimiter = "", bool headerrow = true)
{
GlobalHost.ConnectionManager.GetHubContext<ViewDataHub>().Clients.Client(this.Context.ConnectionId).updateStatus("1a");
cliWeb = new WebClient();
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 |
SecurityProtocolType.Tls;
cliWeb.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0");
cliWeb.DownloadProgressChanged += (sender, args) => client_DownloadProgressChanged(sender, args, this.Context.ConnectionId);
cliWeb.OpenReadCompleted += (sender, evt) =>
{
var totalLength = 0;
ContentFound cf = new ContentFound();
double processed = 0;
int pushToScreen = 100;
int processCounter = 0;
using (var stream = evt.Result)
{
var buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
processed += read;
processCounter = processCounter + 1;
if (processCounter % pushToScreen == 0)
GlobalHost.ConnectionManager.GetHubContext<ViewDataHub>().Clients.Client(this.Context.ConnectionId).NotifyProgress(new ProgressedBytes(totalLength, processed));
}
if (totalLength > 0)
GlobalHost.ConnectionManager.GetHubContext<ViewDataHub>().Clients.Client(this.Context.ConnectionId).NotifyProgress(new ProgressedBytes(totalLength, totalLength));
else
GlobalHost.ConnectionManager.GetHubContext<ViewDataHub>().Clients.Client(this.Context.ConnectionId).NotifyProgress(new ProgressedBytes(100, 100));
cf.Result = ms.ToArray();
}
}
evt.Result.Close();
parseContent(cf, encodingFormat, method, _importstepguid, delimiter, headerrow);
};
cliWeb.Proxy = null;
if (!string.IsNullOrEmpty(username))
{
var encoded = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
cliWeb.Headers.Add("Authorization", "Basic " + encoded);
cliWeb.UseDefaultCredentials = false;
cliWeb.Credentials = new NetworkCredential(username, password);
}
try
{
cliWeb.OpenReadAsync(new Uri(url));
}
catch (Exception e)
{
var a = ""; <--This is where it crashes
}
}