#c# #asp.net-web-api2
#c# #asp.net-web-api2
Вопрос:
Я пытаюсь загрузить файл журнала из клиента настольного приложения на сервер sql db с помощью webapi2, и я получаю сообщение об ошибке «Задача была отменена», эта ошибка не появляется, когда я размещаю проект webapi на локальном компьютере!
public static bool UploadLogData(string exceptionLog)
{
bool result = true;
string dataFilePath = AppDomain.CurrentDomain.BaseDirectory "ExceptionLog.zip";
CommonParamModel responseModel = new CommonParamModel();
try
{
HttpClient httpClient = new HttpClient() { BaseAddress = new Uri("http://mywebsite.com") };
var pairs = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>( "P1", ComputerInfoHelper.GetCustomMachineKey())
, new KeyValuePair<string, string>( "P2", exceptionLog)
};
var content = new MultipartFormDataContent();
FileStream filestream = new FileStream(dataFilePath, FileMode.Open);
string fileName = System.IO.Path.GetFileName(dataFilePath);
content.Add(new StreamContent(filestream), "file", fileName);
content.Add(new FormUrlEncodedContent(pairs));
httpClient.Timeout = TimeSpan.FromMinutes(30);
var response = httpClient.PostAsync("api/Users/AddExceptionDataLog/", content).Resu<
if (response.IsSuccessStatusCode)
{
string strResult = response.Content.ReadAsStringAsync().Resu<
JObject json = JObject.Parse(strResult);
responseModel = json.ToObject(typeof(FreeUserApp)) as CommonParamModel;
}
else
{
result = false;
}
}
catch (Exception ex)
{
Utilities.Error.LogException(Utilities.Error.ErrorSources.Exception, ex.Message, Utilities.Debugger.GetCurrentMethod(), ex);
result = false;
}
return true;
}
Комментарии:
1. Примечание: вы смешиваете
async
и синхронный код, не делайте этого2. Кроме того, не забудьте дождаться этих асинхронных вызовов. Это может быть вашей проблемой.
3. хм, но я вызываю результат после асинхронности, так что в основном это вызов синхронизации… я прав?
4. Вызов
Result
фактически блокирует поток до завершения вызова. Использованиеawait
вместо этого освободит поток.
Ответ №1:
Благодаря Майклу Рэндаллу и DBro Это действительно сработало, проблема была решена после использования await на клиенте и в методе api…