Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > Как решить проблему с вылетом программы .Net?


Автор: xinferum 14.10.2014, 19:02
Доброго времени суток.

Суть проблемы:
Есть терминальный сервер (Windows Server 2008 R2) с некоторым колличеством пользователей. На нем установленна программа, необходимая для работы удаленно (программа установлена именно на сервере, так как использует внутренние ресурсы и установить ее, например, на ноутбук нельзя). Для работы одного пользователя требуется выделенный IP-адрес, поэтому на сервере настроена виртуализация IP.
Какое-то время, программа работала нормально - каждый пользователь заходил на удаленный рабочий стол, получал свой виртуальный IP и работал. Но в один момент программа стала вылетать со следующей ошибкой:

System.Net.Sockets.SocketException сделана попытка доступа к сокету методом, запрещенным правами доступа

Поиски в интернете ни к чему существенному не привели. Максималное колличество доступных портов в реестре менял - не помогло. Отключение брендмауэра проблему тоже не решило.

Программа при запуске каждого своего экземпляра использует один и тот же порт (еще временно бывает занимает на время и другие).

Автор: CompWorm 15.10.2014, 01:01
терминальный сервер, думаю тут не при чём. 
я правильно понял, что программа на вашем рабочем сервере использует разные ИП для доступа к некому внешнему серверу, изображая из себя как бы несколько независимых программ, якобы каждая на своём сервере?

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

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

ИП статически привязаны на каждого терминального пользователя или при каждом коннекте к терминальному серверу пользователь получает разные ИП?

Автор: xinferum 15.10.2014, 07:42
Цитата(CompWorm @ 15.10.2014,  01:01)
я правильно понял, что программа на вашем рабочем сервере использует разные ИП для доступа к некому внешнему серверу, изображая из себя как бы несколько независимых программ, якобы каждая на своём сервере?

два пользователя подключились с одинаковым логином и их побанили

или лажа в сертификатах/подписях, двум выдан одинаковый сертификат с разным содержимым.

есть ещё вариант, что конфликт портов или порты кончились. Бывает, что не смотря на то что исходящий порт не меняется, входящие выбиаются случайно, или спавнятся дополнительные соединения после коннекта на основной порт... тогда если двум юзерам был выдан один и тот же порт, они ворчат.

ИП статически привязаны на каждого терминального пользователя или при каждом коннекте к терминальному серверу пользователь получает разные ИП?

Да, виртуальные IP нужны именно для этого, потому как с одного IP допускается запуск только одного экземпляра программы (иначе она вылетает с соответствующим сообщением об ошибке).

Под одним логином может зайти только один пользователь, второго под таким логином программа не пустит. И на сервере у всех свои учетки.

C сертификатами заморочек нет, так что проблема не в этом.

Там получается так, что сама программа запускает любой свой экземпляр и использует один порт. Но для дополнительных соединиений она динамически берет и отдает порты, причем свободные, и всегда разные, т.е. конфликт может быть только с одним портом (и портов в достатке, нехватки не было).
Тут еще такая интересная вещь - при включенной виртуализации IP иногда удается запустить 2-3 экземпляра программы.

IP пользователям раздаются без привязки, из определенного диапазона, прописанного на сервере в реестре.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)