如何为服务引用指定Web代理

本文关键字:Web 代理 引用 服务 | 更新日期: 2023-09-27 18:04:42

我在http://chennaiemergency.co.in/sree/s2.php?wsdl上找到了一个简单的web服务,我可以通过使用2个浮点值(1,1)通过SOAP UI调用它,并在1-2秒内轻松获得响应。现在,在一个新的visual studio 2010控制台应用程序项目中,我"添加服务引用"并提供WSDL。然后在生成的客户机中,我这样做:

    ServiceReference1.ChnEmergencyPortTypeClient client = new ChnEmergencyPortTypeClient();
    string hospital = client.hospital(1, 1);

1分钟后我得到超时异常。我已经关闭了防火墙。我用的是Windows7x64我是通过代理服务器上网的。

我通过添加web引用尝试了同样的事情,但我得到了相同的超时错误。

现在在web参考实现中,我做了这些修改:

            WebProxy webProxy = new WebProxy("<my proxy server name>", <port>);
            ChnEmergency client = new ChnEmergency();
            client.Timeout = 200000;
            client.Proxy = webProxy;
            string hospital = client.hospital(1, 1);

但我仍然得到超时。有什么建议吗?

我做了一个快速测试,直接(通过电话)内部连接,不涉及代理服务器。我成功地进入了。这表明我提供webproxy的方式有问题。IE internet设置建议我的代理设置为:

地址:a.b.c.com端口:80

所以我正在建立一个像这样的webproxy

WebProxy webProxy = new WebProxy("a.b.c.com", 80);

现在我不知道是否有一些"安全的http"概念涉及到某个地方,我也不知道如何弄清楚。但是用http://a.b.c.com和https://a.b.c.com在浏览器上快速尝试一下就会得到不同的结果。在"http"的情况下,我得到了无效的url。在"https"的情况下,错误是"Google Chrome的连接尝试a.b.c..com被拒绝。"该网站可能已关闭,或者您的网络配置可能不正确"

如果我使用https的webproxy,它会说"service point manager is not configure for https"

我使用fiddler来查看活动,我看到请求确实显示在fiddler中。但是没有回应。这一定意味着请求被通过了吗?或者请求会在较低的级别被阻止(例如:

如何为服务引用指定Web代理

我试着快速制作一个小的web项目,它似乎工作得很好,但是你添加的webservice返回xml的方式是这样的:

<?xml version="1.0" encoding="ISO-8859-1"?>    
  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>    
      <ns1:hospitalResponse xmlns:ns1="urn:ChnEmergency">    
        <return xsi:type="xsd:string">12.944672~80.134578~Chrompet GH~Government~GST Road, Chrompet~Chrompet~600036</return>
      </ns1:hospitalResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

如果您的代理需要密码,您可以尝试:

var proxy = new WebProxy("proxy.foo.com", 8080);
proxy.Credentials = new NetworkCredential("user", "pass");
WebRequest.DefaultWebProxy = proxy;

结果是我使用的代理代理proxyA通过另一个代理代理proxyB返回重定向。使用proxyB直接解决了这个问题。这件事是别人告诉我的,我自己没有弄明白。我使用的代理对象像WebProxy WebProxy = new WebProxy("proxyB.com", 80)。所以问题没有解决,但现在解决了。