C#SoapHttpClientProtocol-设置本地绑定地址(源地址)

时间:2019-04-17 09:49:33

标签: c# url soap soaphttpclientprotocol

我正在尝试对由业务合作伙伴托管的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。

1 个答案:

答案 0 :(得分:0)

我终于设法使它起作用。如果其他人对此有疑问,请按照以下说明进行操作。

  • 在调用远程服务之前,您必须为其找到服务点。像这样通过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(这是我们试图调用的URL)。然后,我想从虚拟PC上的另一个IP发出呼叫,该IP有很多IP地址。您只需要输入所需的IP,如代码第二行所示,例如192.168.5.1。

在使用新的Uri()构造函数调用FindServicePoint时,请确保使用“ http://”,否则将无法正常工作!

之后,只需继续调用该服务即可。两行代码,这就是您所需要的。 :)