Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从代理服务器后面调用Web服务_C#_.net_Web Services_Soap - Fatal编程技术网

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

C# 从代理服务器后面调用Web服务,c#,.net,web-services,soap,C#,.net,Web Services,Soap,我需要在将使用web服务(XMLSOAP服务)的应用程序(C#)中添加一个功能 现在,该应用程序可以(而且大部分)在具有代理服务器的公司环境中使用 我知道SOAP服务使用HTTP协议,因此应该使用端口80,该端口通常保持打开状态。应用程序可以在不使用任何特殊编码的情况下使用web服务,或者我需要编写特殊代码来检测代理设置或您看到的其他一些问题,这对吗 编辑:Webservice是internet上公开提供的服务。它不在同一个网络上。如果您的web服务与调用web服务的客户端在同一个内部网络上,那

我需要在将使用web服务(XMLSOAP服务)的应用程序(C#)中添加一个功能

现在,该应用程序可以(而且大部分)在具有代理服务器的公司环境中使用

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


编辑:Webservice是internet上公开提供的服务。它不在同一个网络上。

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

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

默认情况下,它将使用端口80,您不必进行任何进一步的编码

如果确实需要通过某种代理,只需将以下内容添加到web.config:

  <system.net>
    <defaultProxy>
      <proxy  proxyaddress="http://yourproxyserver:80" />
    </defaultProxy>
  </system.net>
内置代码(WebClient、WCF、HttpWebRequest等)都使用WinHTTP配置来获得代理配置。因此,您所需要做的就是配置WinHTTP以了解代理

在XP中,这是:

proxycfg -u
从用户的IE代理设置(WinInet)导入设置

在Vista/etc上,您使用

netsh winhttp
(还有一些子命令,如“import”)

未经测试,但请尝试:

netsh winhttp import proxy source=ie

在此之后,您的.NET代码应该都通过代理工作,该代理可能已经配置好,以便使用IE等。

确定。所以我做了一些实验,结果证明我们确实需要编写一些代码,让它在代理服务器后面工作。(尽管我更喜欢更好的解决方案)

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

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"); var networkCredentials=新的网络凭据(“用户名”、“密码”、“域”); WebProxy myProxy=newWebProxy(“W.X.Y.Z:NN”,true){Credentials=networkCredentials}; var service=new iptocontry{Proxy=myProxy}; 字符串结果=service.findCountryString(“A.B.C.D”); 我编写了一个测试类,它使用免费的web服务


使用上述代码,我可以成功使用web服务。

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

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>


否。Webservice是internet上公开提供的服务。它不在同一个网络上。您无法在配置元素中执行上述操作?我尝试使用代码(但不是配置文件),但它不起作用。实际上,我打算使用这个服务的应用程序是一个windows应用程序。不确定这是否重要。是否可以通过代码来完成上述操作?原因是需要访问web服务的应用程序是一个windows窗体应用程序,可能在一系列计算机上运行。要求用户执行上述步骤是不可行的。但是如何传递凭据?如果要传递凭据,请使用以下代码:var proxy=new System.Net.WebProxy(proxyAddress,true);proxy.Credentials=new System.Net.NetworkCredential(“用户名”、“密码”);System.Net.WebRequest.DefaultWebProxy=代理;
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.net>
    <settings>
      <servicePointManager expect100Continue="false" />
    </settings>
  </system.net>
</configuration>