无法使用SoapHttpClientProtocol连接到远程服务器

时间:2011-03-04 12:39:11

标签: c# web-services asmx soaphttpclientprotocol

客户端已向我提供了.net asmx webservice的位置。我创建了一个库,我在我的Web应用程序中使用它来与他们的Web服务进行通信。

在我的库中,我创建了对asmx的Web引用

这是我调用服务的代码

using (vendorproxy.vendorproxy wsProxy = new vendorproxy.vendorproxy())
{
    wsProxy.Credentials = new System.Net.NetworkCredential(uname, pwd);

    using (Stream xmlStream = xmlUtil.GenerateStreamFromString(
        wsProxy.GetData(index)))
    {
        //
    }
}

public Stream GenerateStreamFromString(String inputString)
{
    byte[] bytes = UTF8Encoding.UTF8.GetBytes(inputString);
    MemoryStream strm = new MemoryStream();
    strm.Write(bytes, 0, bytes.Length);
    return strm;
}

客户开发了一个测试应用程序来测试他们的服务,它的工作原理。但是,我的应用程序在其系统上部署时失败。我无法单步执行代码,因为客户端没有在网络外部公开服务。这是由他们通过xml文件和他们的wsdl提供样本输出而开发的。

例外情况:

at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)     
at System.Net.HttpWebRequest.GetRequestStream()     
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(
   String methodName, Object[] parameters)     

我的类库的App.config,它具有对服务的web引用和进行调用的引用。我的网络应用程序使用类库

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="clientService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <system.serviceModel>
        <bindings />
        <client />
    </system.serviceModel>
    <applicationSettings>
        <clientService.Properties.Settings>
            <setting name="clientService_client_client" serializeAs="String">
                <value>http://localhost:2362/client.asmx</value>
            </setting>
        </clientService.Properties.Settings>
    </applicationSettings>
</configuration>

解决: 这是在我从

修改原始代码后工作的
using (vendorproxy.vendorproxy wsProxy = new vendorproxy.vendorproxy())
{
    wsProxy.Credentials = new System.Net.NetworkCredential(uname, pwd);
}

using (vendorproxy.vendorproxy wsProxy = new vendorproxy.vendorproxy())
{
    wsProxy.Credentials = new System.Net.NetworkCredential(uname, pwd);
    wsProxy.URL = [correct asmx location read from config file]
    //not sure why it would not automatically pick up from config file. 
}

3 个答案:

答案 0 :(得分:2)

我强烈建议您尝试this answer类似的问题。没有代码更改,只是app.config文件中的一行。

答案 1 :(得分:1)

您的代理可能遇到外部地址问题,可能需要在配置中添加类似内容。

  <system.net>
    <defaultProxy>
      <proxy
          autoDetect = "true" />
    </defaultProxy>
  </system.net>

此致

答案 2 :(得分:0)

我最好的猜测(基于有限的异常信息):

在服务器上部署Web服务时,应该更新用于连接Web服务的位置。

该位置通常是web.config或app.config中的URI / URL。