У меня есть API ASP.Net, который я создал. Он обращается к базе данных, для подключения к которой мне нужно использовать VPN. При этом API будет работать нормально.
Затем я создал службу Windows, которая получает JSON от этого API. При тестировании я использовал его как консольное приложение с помощью метода, упомянутого здесь: https://social.technet.microsoft.com/wiki/contents/articles/30957.c-windows-service-in-console-mode. -for-debug-and-admin.aspx
При тестировании таким образом все работает нормально и так, как ожидалось. Однако, если я соберу службу в режиме выпуска и установлю, она не будет подключаться к API. Я полагаю, что это вероятно, потому что он работает на уровне ОС и не зависит от VPN? Я просто не знаю, как обойти это.
Ниже показано, как я подключаюсь и получаю JSON от API.
var client = new HttpClient();
client.BaseAddress = new Uri(URL);
client.DefaultRequestHeaders.Add("User-Agent", "Anything");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"))
//Initializes a temp list to be returned
List<Company> temp2 = new List<Company>();
var task = client.GetAsync(path);
task.Wait();
var response = task.Result;
if (response.IsSuccessStatusCode)
{
var temp = response.Content.ReadAsStringAsync().Result;
temp2 = JsonConvert.DeserializeObject<List<Company>>(temp);
}
Я кратко прочитал о DefaultProxy, но не совсем понял его использование и то, что мне нужно в этом случае.
Скорее всего, это не связано, но task.Wait(); - лучше await вызов client.GetAsync().
Где-то задействована аутентификация/авторизация?
@GuruStron Единственное, что я получаю, это «Произошла одна или несколько ошибок» в журнале событий.
@Fildor для доступа к БД да, но это делается в API. API просто возвращает JSON оцененных данных из БД. Я могу использовать API в одиночку весь день и в консольном приложении.
@Fildor Я переключился на использование ожидания, посмотрим, будет ли это иметь значение.





Я обнаружил проблему. Спасибо @fildor за предложение использовать await вместо этого. Это не решило проблему, но заставило меня, наконец, выдать ошибку, с которой я мог работать.
Происходило то, что домен API не использовал действительный сертификат SSL/TLS. Теперь, используя:
var handler = new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = delegate { return true; },
};
var client = new HttpClient(handler);
и все работает как задумано.
Какая у вас ошибка?