переход на рабочий сервер

#apache-flex #flex4.5

#apache-flex #flex4.5

Вопрос:

У меня есть php-приложение flex 4.5, которое отлично работает на localhost. Когда я загружаю его на свой удаленный хост, я сталкиваюсь со странной проблемой при попытке получить доступ к производственной версии:

 1. If I am the computer running my localhost, then the production site works.

2. If I am on any other computer then the production site returns the error: "Send failed Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed: url: 'http://localhost/public/gateway.php'"
  

В общем, сборка релиза ищет файлы на моем локальном компьютере. Что я делаю не так?

РЕДАКТИРОВАТЬ: (Если вы пытаетесь использовать этот пример во Flash Builder 4, тогда он будет работать. Проблема возникает только во Flash Builder 4.5 для PHP при попытке запустить сборку выпуска на удаленном сервере (вам также необходимо получить доступ к удаленному веб-сайту с отключенным локальным хостом, поскольку .swf захватывает файлы с локального хоста)

 <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:s="library://ns.adobe.com/flex/spark"
           xmlns:mx="library://ns.adobe.com/flex/mx"
           xmlns:testclass="services.testclass.*"
           minWidth="955" minHeight="600">
<fx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import mx.events.FlexEvent;

        protected function getService(event:FlexEvent):void
        {
            label2.text='this function did NOT work';
            testFunctionResult.token = testClass.testFunction();
        }

    ]]>
</fx:Script>
<fx:Declarations>
    <s:CallResponder id="testFunctionResult"/>
    <testclass:TestClass id="testClass"
                         fault="Alert.show(event.fault.faultString   'n'   event.fault.faultDetail)"
                         showBusyCursor="true"/>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:VGroup width="100%" height="100%" x="75">
<s:Spacer height="25"/>
<s:Label fontSize="18" color="Black" text="did this work?"/>
<s:Label id="label2" color="Blue"
         creationComplete="getService(event)" text="{testFunctionResult.lastResult}"/>
</s:VGroup>

</s:Application>




<?php
class TestClass{
public function testFunction(){
    return "this function worked";
}
}
?>
  

Ответ №1:

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

Я бы посмотрел на все вызовы RemoteObject, WebService и HTTPService, выполняемые приложением. Если вы используете файл конфигурации служб, скомпилированный в ваше приложение; обязательно загляните и туда.

Комментарии:

1. спасибо. Этого не случилось со мной во Flex 4, только когда я обновился до 4.5. Я не могу найти нигде, где жестко задан localhost.

2. Используете ли вы AMF / RemoteObject? Или HTTPService? Или веб-сервис?

3. Когда вы говорите, что используете PHP с ZendFramework, означает ли это, что вы используете RemoteObject и ZendAMF? Публикация вашего проекта может быть полезной во многих ситуациях; но в этом случае вам следует добавить некоторый код к вашему первоначальному вопросу.

4. Я использую Flash Builder 4.5 для PHP, структура которого отличается от Flash Builder 4. Я использую Zend в обоих случаях. Файлы проекта, которые я опубликовал, отлично работают во Flash Builder 4, но не работают во Flash Builder 4.5 для PHP из-за нового способа отделения php от mxml. Я опубликую еще несколько ответов на мой первоначальный вопрос.

5. Я не знаю, что вы подразумеваете под «другой структурой» Flash Builder для PHP. Flash Builder для PHP — это всего лишь пара плагинов Eclipse (Flash Builder и какой-то PHP), соединенных вместе, насколько я знал. Вопрос, который я задаю, не имеет ничего общего с IDE; вы могли бы использовать Notepad и компилятор командной строки, и это не изменило бы мой вопрос. Как вы вызываете удаленные службы? Какой тег вы используете? Я, честно говоря, не знаю, как более четко сформулировать вопрос.

Ответ №2:

Мистер Гага,
у меня была такая же проблема. Решением является установка относительного пути в application/WEB-INF/flex/services-config.xml . Я нашел решение из этого видео http://blog.themidnightcoders.com/index.php/2011/07/26/flex-remoting-urls-and-understanding-the-send-failed-error/

«Компилятор встраивает каналы, конечные точки и пункты назначения в SWF», — рассказывает видео.

Сначала мое определение канала было таким:

       <channels>
          <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
              <endpoint url="http://localhost:8080/applicationRoot/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
           </channel-definition>
      </channels>
  

Затем я изменил на это:

       <channels>
          <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
              <endpoint url="/applicationRoot/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
           </channel-definition>
      </channels>
  

Теперь я могу подключать сервер с удаленных компьютеров.