从代理服务器后面调用Web服务

时间:2009-05-13 17:11:22

标签: c# .net web-services soap

我需要在应用程序(C#)中添加一个使用Web服务(XML SOAP服务)的功能。

现在,这个应用程序可以(并且主要)在具有代理服务器的公司环境中使用。

我理解SOAP服务使用HTTP协议,因此应该使用端口80,它通常保持打开状态。应用程序是否可以在没有任何特殊编码的情况下使用Web服务,或者我需要编写特殊代码来检测代理设置或您看到的其他一些问题?

编辑:Webservice是互联网上的公共服务。它不在同一个网络上。

6 个答案:

答案 0 :(得分:10)

默认使用端口80,您不必再进行任何编码。

如果您确实需要通过某种代理,您需要做的就是将以下内容添加到您的web.config中:

  <system.net>
    <defaultProxy>
      <proxy  proxyaddress="http://yourproxyserver:80" />
    </defaultProxy>
  </system.net>

您也可以使用以下代码执行此操作:

WebRequest.DefaultWebProxy = new WebProxy("http://yourproxyserver:80/",true);

答案 1 :(得分:8)

您可以使用本地计算机的默认设置:

System.Net.ServicePointManager.Expect100Continue = false; 
wsclient.Proxy=  System.Net.HttpWebRequest.GetSystemWebProxy();
wsclient.Proxy.Credentials = CredentialCache.DefaultCredentials;     

并在app.config中添加此配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.net>
    <settings>
      <servicePointManager expect100Continue="false" />
    </settings>
  </system.net>
</configuration>

答案 2 :(得分:7)

行。所以我做了一些实验,事实证明我们确实需要编写一些代码才能使它从代理服务器后面运行。 (虽然我会更喜欢更好的解决方案)

因此,它实际上向下询问用户的代理服务器详细信息,然后为代理服务器配置服务代理类,如下所示:

var networkCredentials = new NetworkCredential ("username", "password", "domain");
WebProxy myProxy = new WebProxy ("W.X.Y.Z:NN", true) {Credentials = networkCredentials};
var service = new iptocountry { Proxy = myProxy };
string result = service.FindCountryAsString ("A.B.C.D");

我写了一个测试类,它使用IP To Country免费的网络服务。

使用上面的代码,我可以成功使用Web服务。

答案 3 :(得分:5)

内置代码(WebClient,WCF,HttpWebRequest等)都使用WinHTTP配置来获取代理配置。所以你需要做的就是配置WinHTTP以了解代理!

在XP中,这是:

proxycfg -u

从用户的IE代理设置(WinInet)导入设置。

在Vista / etc上,您使用

netsh winhttp

(和某些子命令如“import”)

未经测试,但请尝试:

netsh winhttp import proxy source=ie

之后,您的.NET代码应该都可以通过代理使用已经配置的代理来使用IE等。

答案 4 :(得分:-1)

如果您的网络服务与调用网络服务的客户端位于同一内部网络上,那么它不应该通过代理服务器。

答案 5 :(得分:-1)

只要允许网络流量(端口80)通过,您就不需要做任何特殊的事情。从路由器/代理服务器的角度来看,Web服务调用与任何其他HTTP流量相同。