Flex добавляет неверный порт для вызова CFC - PullRequest
2 голосов
/ 08 марта 2012

У меня есть приложение Flex / CF, которое находится на 2 резервных серверах за балансировщиком нагрузки.Как Flex, так и сторона CF делают вызовы на один и тот же CFC.Flex, CF и CFC находятся в одной папке.Когда код CF вызывает CFC, проблем нет.Однако когда код Flex вызывает CFC, он добавляет явный порт "84" к URL-адресу.Это вызывает проблему для балансировщика нагрузки, который принимает трафик только от порта 80. Как я понимаю, балансировщик нагрузки будет внутренне маршрутизировать запросы от порта 80 к 1 из 2 серверов на порту 84 (но эта внутренняя маршрутизация должна быть невидимой дляклиент).

Я жестко запрограммировал расположение WSDL в гибком коде следующим образом:

services.xxxService.wsdl = "http://devsite.xxx.com/xxx/xx/xx/xx.cfc?wsdl";

Я также пробовал относительный путь при определении WSDLрасположение вроде этого:

services.xxxService.wsdl = "xx/xx/xx.cfc?wsdl";

Оба результата приводят к тому, что вызов веб-службы выглядит (когда я смотрю в анализаторе пакетов Чарльза):

http://devsite.xxx.com:84/xxx/xx/xx/xx.cfc?wsdl

Я создал несколько приложений Flex с такой же настройкой, и у меня никогда не было этой проблемы.Я даже развернул это приложение на нескольких серверах БЕЗ балансировщика нагрузки, и я не вижу порта, указанного ни в одном из вызовов Flex к CFC.

Что насчет Flex, он вызывает WSDL с номером порта икод CF нет?Что-то происходит на балансировщике нагрузки, которого я не знаю?

1 Ответ

2 голосов
/ 08 марта 2012

Это не проблема Flex, это проблема ColdFusion.По умолчанию WSDL, созданные на основе CFC (без указания дополнительных параметров), генерируют элемент <wsdlsoap:address location>, полученный путем интроспекции.Таким образом, сервер CF просматривает собственную информацию локального экземпляра и выдает абсолютный URL-адрес, соответствующий его настройкам ...

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

Решение: в CF8 или выше вы можете добавить новый атрибут к тегу «serviceaddress»:

<cfcomponent output="false" serviceaddress="http://127.0.0.1:80/myService.cfc">

Это заставит CFC генерировать правильный элемент <wsdlsoap:address location> при запросе WSDL.

Причина, по которой ваш клиент CF работает правильно, а клиент Flex - нет ... заключается в том, чтоклиент CF не учитывает расположение адреса WSDL в XML, но вместо этого использует начальный адрес, для которого он создан, для своей заглушки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...