我正在尝试对由业务合作伙伴托管的Web服务进行Soap调用。我遇到的问题是,我们的客户端托管在具有多个IP的虚拟PC上。我想使用其他(非默认)IP地址调用托管的Web服务。这是为什么?我们的客户端应用程序和托管的Web服务之间存在VPN连接,但在两个IP之间建立了LAN2LAN。现在,我必须更改本地源IP地址以符合VPN要求。
我尝试使用SoapHttpClientProtocol的WebProxy,将其值设置为新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。
答案 0 :(得分:0)
我终于设法使它起作用。如果其他人对此有疑问,请按照以下说明进行操作。
示例:
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(这是我们试图调用的URL)。然后,我想从虚拟PC上的另一个IP发出呼叫,该IP有很多IP地址。您只需要输入所需的IP,如代码第二行所示,例如192.168.5.1。
在使用新的Uri()构造函数调用FindServicePoint时,请确保使用“ http://”,否则将无法正常工作!
之后,只需继续调用该服务即可。两行代码,这就是您所需要的。 :)