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