我有一个在本地主机上运行完美的flex 4.5 php应用程序。当我将它上传到我的远程主机时,当我尝试访问生产版本时,我遇到了一个奇怪的问题:
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'"
总而言之,发布版本正在我的localhost机器上查找文件。我做错了什么?
编辑:(如果您在Flash Builder 4中尝试此示例,那么它将起作用。当您尝试在远程服务器上运行发布版本时,问题仅出现在Flash Builder 4.5 for PHP中(您还必须访问)关闭本地主机的远程网站,因为.swf从localhost获取文件)
<?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";
}
}
?>
答案 0 :(得分:2)
看起来您的生产SWF有一些硬编码到localhost URL的远程调用。你必须找到并改变它。
我会查看应用程序所做的所有RemoteObject,WebService和HTTPService调用。如果您使用编译到您的应用程序中的Services-config文件;一定要看那里。
答案 1 :(得分:1)
先生。加加,
我有同样的问题。解决方案是在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/
“编译器EMBEDS频道,端点和目的地进入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>
现在我可以从远程机器连接服务器了。