Невозможно подключиться к удаленному серверу с помощью SoapHttpClientProtocol
Клиент предоставил мне свое местоположение.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);
}
К
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 ответа
Я настоятельно призываю вас попробовать этот ответ на аналогичный вопрос. Никаких изменений кода, просто строка в вашем файле app.config.
У вас могут быть проблемы с получением прокси на внешнем адресе, вам может понадобиться добавить что-то подобное в вашу конфигурацию.
<system.net>
<defaultProxy>
<proxy
autoDetect = "true" />
</defaultProxy>
</system.net>
С уважением
Мое лучшее предположение (основываясь на информации об ограниченных исключениях):
Вы должны обновлять расположение, используемое для подключения к веб-сервису, когда вы развертываете его на своих серверах.
Обычно это URI/URL внутри файла web.config или app.config.