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

问题描述 投票:1回答:1

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

c# url soap soaphttpclientprotocol
1个回答
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(这是我们试图调用的那个)。然后我想在我们的虚拟PC上使用不同的IP拨打电话,这些IP上有许多IP地址。您只需输入所需的IP,如代码的第二行所示,例如192.168.5.1。

使用新的Uri()constrcutor调用FindServicePoint时确保使用“http://”,否则它将无效!

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

© www.soinside.com 2019 - 2024. All rights reserved.