从代理服务器后面调用Web服务
我需要在应用程序(C#)中添加一个function,它将使用Web服务(XML SOAP服务)。
现在,这个应用程序可以(并且主要)在具有代理服务器的企业环境中使用。
我理解SOAP服务使用HTTP协议,因此应该使用端口80,它通常保持打开状态。 应用程序是否可以在没有任何特殊编码的情况下使用Web服务,或者我需要编写特殊代码来检测代理设置或您看到的其他一些问题?
编辑:Webservice是互联网上的公共服务。 它不在同一个网络上。
默认情况下它将使用端口80,您不必进行任何进一步的编码。
如果您确实需要通过某种代理,那么您需要做的就是将以下内容添加到您的web.config中:
您也可以使用以下代码执行此操作:
WebRequest.DefaultWebProxy = new WebProxy("http://yourproxyserver:80/",true);
您可以使用本地计算机的默认设置:
System.Net.ServicePointManager.Expect100Continue = false; wsclient.Proxy= System.Net.HttpWebRequest.GetSystemWebProxy(); wsclient.Proxy.Credentials = CredentialCache.DefaultCredentials;
并在app.config中添加此配置:
好。 所以我做了一些实验,事实certificate我们确实需要编写一些代码才能使它从代理服务器后面运行。 (虽然我会更喜欢更好的解决方案)
因此,它实际上向下询问用户的代理服务器详细信息,然后为代理服务器配置服务代理类,如下所示:
var networkCredentials = new NetworkCredential(“username”,“password”,“domain”); WebProxy myProxy = new WebProxy(“WXYZ:NN”,true){Credentials = networkCredentials}; var service = new iptocountry {Proxy = myProxy}; string result = service.FindCountryAsString(“ABCD”);
我写了一个测试类,它使用IP To Country免费网络服务。
使用上面的代码,我可以成功使用Web服务。
内置代码(WebClient,WCF,HttpWebRequest等)都使用WinHTTP配置来获取代理配置。 所以你需要做的就是配置WinHTTP以了解代理!
在XP中,这是:
proxycfg -u
从用户的IE代理设置(WinInet)导入设置。
在Vista / etc上,你使用
netsh winhttp
(以及一些子命令,如“import”)
未经测试,但尝试:
netsh winhttp import proxy source=ie
之后,您的.NET代码应该都可以通过可能已经配置使用的代理来使用IE等。
如果您的Web服务与调用Web服务的客户端位于同一内部网络上,那么它不应该通过代理。
只要允许Web流量(端口80)通过,您就不需要做任何特殊操作。 从路由器/代理服务器的角度来看,Web服务调用与任何其他HTTP流量相同。