Соединение WCF Channel не работает при запуске из сервиса

276
05 мая 2017, 15:08

Всем привет!

Я создаю такое соединение:

        EndpointAddress address = new EndpointAddress("https://xxx.xxx.ru/b2bJSON.asmx");
        BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
        binding.MaxBufferSize = 64000000;
        binding.MaxReceivedMessageSize = 64000000;
        binding.ReceiveTimeout = new TimeSpan(0, 10, 0);
        binding.SendTimeout = new TimeSpan(0, 10, 0);
        ChannelFactory<B2BJSONSoap> factory = new ChannelFactory<B2BJSONSoap>(binding, address);
        factory.Credentials.UserName.UserName = userName;
        factory.Credentials.UserName.Password = pw;
        B2BJSONSoap channel = factory.CreateChannel();

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

Для того, чтобы обойти прокси в App.config, пришлось прописать это:

<configuration> 
  <system.net> 
    <defaultProxy enabled="false" useDefaultCredentials="false"> 
      <proxy /> 
    </defaultProxy> 
  </system.net> 
</configuration>

Я создал проект Windows Service, который запускает проект, в котором соединение, запросы и все остальное. И при запуске через сервис, валится такое исключение:

System.ServiceModel.EndpointNotFoundException: Прослушивание на https://xxx.xxx.ru/b2bJSON.asmx не выполняла ни одна конечная точка, которая могла бы принять сообщение. Среди прочих причин это могло быть вызвано неправильным адресом или действием SOAP. Подробнее см. в описании InnerException (если имеется). ---> System.Net.WebException: Невозможно соединиться с удаленным сервером ---> System.Net.Sockets.SocketException: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера xxx:443 
   в System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) 
   в System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception) 
   --- Конец трассировки внутреннего стека исключений --- 
   в System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) 
   в System.Net.HttpWebRequest.GetRequestStream() 
   в System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStream() 
   --- Конец трассировки внутреннего стека исключений ---

В чем причина появления этого исключения тут? При том, что без сервиса код отлично работает.

Answer 1

Дело было в настройках локальной сети. LocalService просто не проходил прокси. Установщик сервиса написал так:

[RunInstaller(true)]
public class ProjectInstaller : Installer
{
    private ServiceProcessInstaller process;
    private ServiceInstaller service;
    public ProjectInstaller()
    {
        process = new ServiceProcessInstaller();
        process.Account = ServiceAccount.User;
        service = new ServiceInstaller();
        service.ServiceName = "WebServiceDownload";
        Installers.Add(process);
        Installers.Add(service);
    }
}

При установке запрашивает логин и пароль, указал юзера из сети, работает.

READ ALSO
Обратиться к DataTable через SQL запрос

Обратиться к DataTable через SQL запрос

ПриветствуюЕсть dataset с несколькими таблицами

193
Как сделать вывод системы диалогов на canvas Unity

Как сделать вывод системы диалогов на canvas Unity

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

230
Не считывает информацию из XML файла

Не считывает информацию из XML файла

Выполняю UnitTestЕсть XML файл

520