Является ли запуск программы, которая выполняет несколько вызовов веб-служб в общей сети, обреченным подходом? - PullRequest
0 голосов
/ 08 февраля 2019

Это дополнительный вопрос к: ошибке при создании веб-прокси, указанной в разделе конфигурации 'system.net/defaultproxy'

У меня есть консольное приложение C #, которое развернуто наудаленный сервер.Программа работает очень хорошо, пока не попытается выполнить вызов к внешнему веб-сервису, после чего происходит сбой таким образом, который я опишу ниже.

Согласно принятому там ответу, первоначальная проблема с моим приложениембыло вызвано тем, что я запускал его с общего сетевого диска.(Исходное исключение, которое я получил, было очень похоже на описанное в связанном вопросе).Конечно же, как и в ответе, он прекрасно работает, когда я запускаю его с локального диска на сервере.

Я сейчас пытаюсь выяснить, есть ли способ запустить мою программу из общего ресурса.сетевой диск, или если весь подход обречен, и я должен просто отказаться от этого и попробовать что-то еще.

В качестве некоторого дальнейшего фона моя программа "живет" на удаленном сервере, она будет запущена другим автоматическимпроцесс, который "живет" на другом сервере.Я пытаюсь решить, где именно его разместить, чтобы процесс на другом сервере мог получить к нему доступ.

Я думал о попытке использовать планировщик задач Windows или что-то в этом роде, но яне думайте, что это было бы хорошим решением, потому что есть достаточное количество логики с тем, какие именно параметры командной строки должны использоваться и как именно файлы, которые генерирует программа, должны быть распределены после ее завершения.Кроме того, удаленный процесс предоставляет различные службы, такие как автоматические уведомления об ошибках, которые невозможны с рассматриваемого сервера.

Я попробовал исправление, указанное в в этом ответе , и добавил следующую строку в свойApp.config:

<system.net>
    <defaultProxy enabled="false" useDefaultCredentials="false">
    </defaultProxy>
  </system.net>

Это исправляет исходное исключение.Тем не менее, когда я запускаю с общего диска, я получаю следующее исключение при попытке выполнить вызов веб-службы с HttpClient:

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The underlying connection was closed: Unable to connect to the remote server. ---> System.Net.Sockets.SocketException: An invalid argument was supplied
   at System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
   at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6)
   at System.Net.PooledStream.Activate(Object owningObject, Boolean async, GeneralAsyncDelegate asyncCallback)
   at System.Net.Connection.CompleteStartConnection(Boolean async, HttpWebRequest httpWebRequest)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
   --- End of inner exception stack trace ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Reports.Models.User.<GetUsersWorkflow>d__65`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at [Class].<GetCSV>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at [Namespace].MainWindow.<<runReport_Click>b__9_0>d.MoveNext()

Однако при попытке запустить это с локальногоНа моем персональном компьютере ( не с сервера) я получаю совершенно другую ошибку:

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The remote name could not be resolved: '[API location]'
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
   --- End of inner exception stack trace ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Reports.Models.User.<GetUsersWorkflow>d__65`1.MoveNext() in [Location where:line 492
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at [File Name].<GetCSV>d__1.MoveNext() in [File Name]:line 98
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at [Namespace].MainWindow.<<runReport_Click>b__9_0>d.MoveNext() in [location]\MainWindow.xaml.cs:line 154

В строке 492 в соответствующем вызове GetAsync(url) ниже:

HttpClient client = HttpClientConstructor.GetHttpClient(false);
HttpResponseMessage message = await client.GetAsync(url);

Я начинаю подозревать, что это неправильный подход, и что я должен попробовать что-то другое, кроме запуска программы из этого места.Это правильно, или я что-то упустил?Есть ли какой-нибудь способ сделать эту работу, или мне нужно найти другое решение?

...