Я вызываю асинхронный веб-api из веб-приложения ASP.NET ASP.NET из синхронного метода. Я получаю ошибку. произошла одна или несколько ошибок. При отправке запроса произошла ошибка. Подключенное соединение было закрыто: произошла непредвиденная ошибка при приеме. Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом.Вызов асинхронного метода web api в синхронном методе trwing error
Если я вызываю одно и то же асинхронное веб-приложение api из приложения форм Windows, используя асинхронный метод, веб-api возвращает идеальное значение. Я должен использовать синхронный метод в веб-приложении, и, следовательно, код, который успешно протестирован в приложении Windows, не может использоваться в веб-приложении. Ниже приведена часть кода.
private string SECURE_API_Async(string WebApiURL, HttpContent httpContent, string[] apiNames, HTTP httpMethod, DictionaryEntry[] apiValues)
{
try
{
using (httpContent)
{
Last_HTTPRequestContent = httpContent == null ? "null" : httpContent.ReadAsStringAsync().Result;
HttpClient httpClient = new HttpClient(httpClientHandler);
httpClient.BaseAddress = new Uri(WebApiURL);
if (SessionTokenID != null)
{
httpClient.DefaultRequestHeaders.Add("SessionTokenID", SessionTokenID);
}
httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml"));
string target_URI = "api";
foreach (string apiName in apiNames)
{
target_URI = string.Format("{0}/{1}",
target_URI,
apiName);
}
string target_URI_parameters = string.Empty;
if (apiValues != null)
{
target_URI_parameters = CreateParameterString(apiValues);
}
target_URI = (target_URI_parameters == string.Empty) ? target_URI : string.Format("{0}?{1}", target_URI, target_URI_parameters);
_lastURL = httpClient.BaseAddress.ToString() + target_URI;
Last_HTTPstatus = 0;
Last_ReasonPhrase = string.Empty;
Last_HTTPResponse = null;
Last_HTTPResponseString = string.Empty;
HttpResponseMessage response = null;
try
{
switch (httpMethod)
{
case HTTP.PUT:
{
response = httpClient.PutAsync(target_URI, httpContent).Result;
break;
}
Я получаю сообщение об ошибке при вызове метода PutAsync.
Теперь, если я изменю метод
private **async** **Task<string>** SECURE_API_Async(string WebApiURL, HttpContent httpContent, string[] apiNames, HTTP httpMethod, DictionaryEntry[] apiValues)
и вызова API для
response = **await** httpClient.PutAsync(target_URI, httpContent);
я получаю правильный ответ. То, что я узнал после того, как поиск в сети одновременно
response = **await** httpClient.PutAsync(target_URI, httpContent);
(когда вызывающий метод имеет асинхронное значение ключевого слова вызова метода является aynchronous) и
response = httpClient.PutAsync(target_URI, httpContent).**Result**;
(когда метод не имеет ключевого значение асинхронного метод вызова является синхронным)
Должно возвращать правильное ответное сообщение. Но мой синхронный метод вызывает базовую ошибку подключения. Может ли кто-нибудь помочь? Спасибо.