2014-12-03 1 views
0

Извините, если это звучит очень просто, но я очень новичок в wcf/network, поэтому, пожалуйста, несите меня.Как управлять номером порта при развертывании службы окна, размещенной службой WCF

Я хочу развернуть услугу WCF, размещенную в окне, на три сервера (Dev, UAT, Prod), поэтому URL-адрес конечной точки для каждого сервера необходимо сохранить в базе данных, чтобы развертывание можно было автоматизировать с использованием сценария. Служба окна ничего не делает, кроме размещения службы wcf, и когда она начинается, я устанавливаю URL-адрес конечной точки как localhost: 8081/MyCompnay/MyService и просто использую базовый интерфейс BasicHttpBinding для передачи в конструктор хоста службы. В настоящее время я выбираю случайный номер порта (8080 почти наверняка используется), интересно, какой оптимальный способ управления номером порта в таком случае, что служба будет развернута на разные серверы? Я обеспокоен тем, что даже если я сделаю конфигурационный номер порта, может случиться, что один и тот же номер порта может быть взят некоторыми другими приложениями, когда моя служба перезапускается после завершения работы (по какой-либо причине!). Я хочу быть уверенным, что номер порта, который я установил, не будет использоваться другими приложениями. Надеюсь, я сделал это ясно.

+0

Вы посмотрели варианты развертывания? Проверьте [эту статью] (http://www.hanselman.com/blog/WebDeploymentMadeAwesomeIfYoureUsingXCopyYoureDoingItWrong.aspx) на использование преобразований, чтобы упростить развертывание. Я предполагаю, что вы хотите сделать, это можно сделать с помощью этой техники. – techvice

ответ

0

Никогда не гарантируется, что номер порта не будет снят. У вас может быть серия номеров портов, которые вы пытаетесь проделать через них, пока не найдете тот, который работает. Если вы не найдете тот, который работает, вы выходите из системы и информируете пользователя. Выберите номера портов выше 49151, так как они считаются private ports.

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

Существует также возможность зарегистрировать номер вашего порта с помощью IANA, а затем любой, кто использует ваш порт, является технически плохим приложением, но его не предотвращает. Это слишком много для большинства приложений.

+0

Спасибо за ответ. Я столкнулся с другой проблемой по номеру порта. Вначале я не могу запустить мою службу окон (которая действует как хост для службы wcf) на сервере, а ошибка «У вашего процесса нет разрешения на пространство имен HTTP». Затем я попросил нашего администратора изменить учетную запись, используемую для входа в службу окна, в качестве локальной учетной записи администратора. – stt106

+0

После обновления учетной записи служба окна может быть запущена на сервере, но сервер не прослушивает URL-адрес службы wcf, который я установил в методе OnStart() службы окна. Поэтому я перезагрузил сервер, теперь у меня другая ошибка: номер порта TCP (содержащийся в URL-адресе, где я хочу, чтобы служба wcf была прослушена) уже используется другим приложением. Я уверен, что номер порта не используется в соответствии с netstat -a, но независимо от того, какой номер порта я пытаюсь сделать, он всегда дает ту же ошибку: номер порта используется другим приложением. Любое предложение? – stt106

+0

Возможно ли, что-то началось перед вашим приложением, используя этот порт, и впоследствии остановилось. Если вы снова запустите приложение, оно запустится? –

Смежные вопросы