C # SoapHttpClientProtocol - установить локальный адрес привязки (адрес источника) - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь сделать Soap-вызов веб-сервису, организованному деловым партнером.У меня проблема в том, что наш клиент размещен на виртуальном ПК с несколькими IP-адресами.Я хотел бы позвонить на размещенный веб-сервис с другим (не по умолчанию) IP-адресом.Это почему?Существует VPN-соединение между нашим клиентским приложением и размещенным веб-сервисом, но оно настроено для LAN2LAN между двумя IP-адресами.Теперь мне нужно изменить IP-адрес локального источника, чтобы он соответствовал требованиям VPN.

Я попытался использовать WebProxy SoapHttpClientProtocol, установив в качестве его значения новый IP, но, похоже, он не работает.Я получаю сообщение об ошибке HTTP 404.

Вот часть кода:

//soapApiClient is typeof SoapHttpClientProtocol
//endpoint url -> webservice, url from appSettings
var url = SettingsProvider.ClientSapGetUserDataUrl;
soapApiClient.Url = url;

//proxy settings -> setting new IP, defined in appSettings
var proxy = SettingsProvider.ClientProxyAddress;
soapApiClient.Proxy = new WebProxy(proxy);

//credentials
soapApiClient.Credentials = GetCredentials();

Я отправляю HTTP-код пользователя и возвращаемое значение должно быть данными пользователя из SAP, в настоящее время я получаю 404 httpкод ошибки.Для сравнения, он работает как брелок от SoapUI.Может быть, настройка прокси не то, что я ищу?Любая помощь будет высоко ценится.

РЕДАКТИРОВАТЬ: быть более понятным В настоящее время по умолчанию служба вызывается из IP-адреса по умолчанию 91.185.201.88.IP-адрес службы - 10.67.145.70.Я хочу изменить это так: сервис вызывается с 192.168.4.2 до сервиса 10.67.145.70.

1 Ответ

0 голосов
/ 18 апреля 2019

Мне наконец удалось заставить это работать. Если у кого-то еще возникнут проблемы с этим, просто следуйте этим инструкциям.

  • Прежде чем вызывать удаленную службу, вы должны найти для нее точку обслуживания. Это делается через ServicePointManager, например,

Пример:

var servicePointUserReader = ServicePointManager.FindServicePoint(new Uri(FULLY QUALIFIED REMOTE SERVICE URL));  
servicePointUserReader.BindIPEndPointDelegate = (sp, remote, retryCount) => new IPEndPoint(IPAddress.Parse(SOURCE IP FROM WHICH YOU WANT TO SEND REQUEST), 0); 

В моем примере полный URL-адрес удаленной службы был похож на http://65.145.63.71:8010/sapService (это тот, который мы пытаемся вызвать). Затем я хотел позвонить с другого IP-адреса на нашем виртуальном ПК, который имеет множество адресов, адресованных ему. Вам просто нужно ввести желаемый IP-адрес, как показано во второй строке кода, например, 192.168.5.1.

Убедитесь, что вы используете "http://" при вызове FindServicePoint с новым constrcutor Uri (), иначе это не будет работать!

После этого просто продолжайте звонить в сервис. Две строки кода, это все, что вам нужно. :)

...