从代理服务器后面添加Web服务引用

时间:2011-09-12 10:25:46

标签: c# asmx proxy-authentication

我正在使用vs2010。在一个简单的控制台应用程序中,我尝试将服务引用添加到旧的asmx服务http://***/service1.asmx。 我的计算机位于代理服务器后面,因此出现错误:

  

“远程服务器返回了意外响应:(407)代理   需要验证。“

当我使用wsdl工具时,我无法定义代理服务器端口号,我得到消息,服务器,例如10.0.0.3:80,没有响应,但我需要指定8080端口,不知道如何。我怎么能创建一个参考?

4 个答案:

答案 0 :(得分:27)

我花了近50个小时才发现问题,在网上找不到这个简单的解决方案。

在Web.config的“配置”部分下添加:

  <system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true"></defaultProxy>
</system.net>

然后就像一个魅力!

您也可以从后面的代码中执行此操作:

serviceConnection = new WebService1();
serviceConnection.Proxy = System.Net.HttpWebRequest.GetSystemWebProxy();
serviceConnection.Proxy.Credentials = CredentialCache.DefaultCredentials; 

作品很漂亮!!。

如果您需要从HTTPS位置使用,请添加以下配置:

<message clientCredentialType="Certificate" algorithmSuite="Default" />

答案 1 :(得分:7)

在添加Web引用时,请查看以下链接以指定代理地址和服务器端口。

http://msdn.microsoft.com/en-us/library/bb628649.aspx

http://msdn.microsoft.com/en-us/library/03seed2h.aspx

添加对asmx的引用

  1. 右键单击控制台应用程序,然后选择添加服务引用。

  2. 单击高级按钮,然后在地址栏中输入asmx地址。单击旁边的绿色按钮以发现asmx。

  3. 为其命名,然后点击添加参考号。

  4. 更新:尝试更新web config / app config并添加;

    <system.net>
    
    <defaultProxy>
    <proxy usesystemdefault="True" proxyaddress="http://[your proxy address and port number]"  bypassonlocal="True"/>
    
    </defaultProxy>
    
    </system.net>
    

答案 2 :(得分:3)

添加参考:

确保您正在添加此类参考。您需要点击“Add Service Reference”,转到“Advanced”,然后点击“Add Web Reference”。

然后添加以下内容:

http://***/service1.asmx

对于port 8080,您使用:

http://***:8080/service1.asmx

为您的网络服务设置代理:

要确保Web服务正在使用您的Internet Explorer proxy,您可以将以下内容添加到客户端应用程序上的Web Service对象中。

webService1.Proxy = WebRequest.GetSystemWebProxy();

您也可以手动设置代理:

webService1.Proxy = new WebProxy("hxxp://my-proxy-settings:8080/");

<强> NTLM

如果您使用NTLM,您可能还需要确保在客户端项目中使用默认凭据。您可以通过在UseDefaultCredentials设置为true的情况下创建Web服务时将其传入来轻松完成此操作。

public webService _webService = new webService() { UseDefaultCredentials = true };

您还可以为Web Service项目禁用NTLM身份验证。您可以在Project Properties -> Web下执行此操作。如果取消选中此选项,则无需进行身份验证即可添加Web服务。

http://msdn.microsoft.com/en-us/library/aa378749.aspx

答案 3 :(得分:2)

我无法使用vs2010自动创建Web服务引用。 我决定使用wsdl.exe工具,并在参数named / parameters中传递带代理服务器凭据的xml文件

  

wsdl.exe http://service uri / service1.asmx   /parameters:c:\temp\wsdlparameters.xml

WSDL.exe生成文件Service1.cs(默认)。我将此文件添加到我的项目中并使用它:

WebProxy wp = new WebProxy(@"YourProxyServer",ProxyPort);
wp.Credentials = new NetworkCredential("USERNAME", "PASSWORD");
Service1 service1 = new Service1();
service1.Proxy = wp;
service1."YourServiceMethod"();