2012-03-27 4 views
0

В моем приложении Azure есть несколько гнезд ZeroMQ, которые привязаны к нескольким портам tcp. Он работал нормально, когда я его разработал локально, но они были недоступны после загрузки в Azure. К сожалению, после добавления портов в Azure ServiceDefinition (чтобы разрешить доступ после загрузки в azure) каждый раз, когда я запускаю приложение локально, он жалуется на то, что порты уже используются. Я предполагаю, что это связано с балансировщиком (debug/local), отражающим поведение лазури. Я сделал что-то неправильно или это ожидаемое поведение? Если последнее верно, как можно справиться с такой ситуацией? Я думаю, я мог бы использовать разные порты для сокетов и указать их как частные порты в конечных точках, но это больше похоже на обходной путь.Azure InputEndpoints блокирует мои TCP-порты

Благодаря & С уважением

ответ

2

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

Если, например, вы создали входной конечной точки под названием «ZeroMQ,» вы бы открыть порт, чтобы использовать что-то вроде этого, были ли принудительно отображаться порты или вы просто позволить им получить динамически отображаются:

var zeromqPort = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["ZeroMQ"].IPEndpoint.Port; 
+0

Код возвращает тот же порт (5555 в моем случае), который был введен как внешний порт и, следовательно, также приводит к исключению: |. – Pharao2k

0

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

+0

ServiceEnvironment == RoleEnvironment? – Pharao2k

+0

Да, именно так думал Дэвид. Установили ли вы параметр localPort в настройке службы? – 02strich

0

Вы используете более одного экземпляра роли? В эмуляторе вычислений внутренние конечные точки для разных экземпляров ролей в конечном итоге будут одним и тем же портом на разных IP-адресах. Если вы попытаетесь просто открыть порт, не прослушивая определенный IP-адрес, вы, вероятно, столкнетесь с конфликтом между несколькими экземплярами. (Например, они все пытаются просто открыть порт 5555 вместо одного открытия 127.0.0.2:5555 и одного открытия 127.0.0.3:5555.)

+0

Я запускаю только один экземпляр, так что это не должно быть проблемой :) – Pharao2k

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