我正在尝试向业务合作伙伴托管的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。
我终于成功了。如果其他人对此有疑问,请按照这些说明操作。
例:
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(这是我们试图调用的那个)。然后我想在我们的虚拟PC上使用不同的IP拨打电话,这些IP上有许多IP地址。您只需输入所需的IP,如代码的第二行所示,例如192.168.5.1。
使用新的Uri()constrcutor调用FindServicePoint时确保使用“http://”,否则它将无效!
之后,继续调用该服务。两行代码,这就是你所需要的。 :)