Невозможно подключиться к удаленному серверу с помощью SoapHttpClientProtocol - PullRequest
1 голос
/ 04 марта 2011

Клиент предоставил мне свое местоположение .net asmx webservice.Я создал библиотеку, которую я использую в своем веб-приложении для связи с их веб-службой.

В моей библиотеке я создал веб-ссылку на asmx

Это мой код для вызова их службы.

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 моей библиотеки классов, в которой есть веб-ссылка на службуи тот, который делает вызов.Библиотека классов используется моим веб-приложением

<?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);
}

TO

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 ]

2 голосов
/ 12 ноября 2012

Я настоятельно призываю вас попробовать этот ответ на аналогичный вопрос.Никаких изменений кода, просто строка в вашем файле app.config.

1 голос
/ 04 марта 2011

У вас могут быть проблемы с получением прокси на внешнем адресе, вам может понадобиться добавить что-то подобное в вашу конфигурацию.

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

Привет

0 голосов
/ 04 марта 2011

Моя лучшая догадка (основываясь на информации об ограниченных исключениях):

Вы должны обновлять расположение, используемое для подключения к веб-сервису, когда вы развертываете его на своих серверах.

Обычно это URI / URL-адрес внутри файла web.config или app.config.

...