Flash Remoting要实现跨域连接,需要创建一个“crossdomain.XML”的域策略文件,名称必须为“crossdomain.XML”,然后放置在DomainA(即Remoting Service服务器)的站点根目录下。
文件内容是一个允许连接的Client端域名或IP列表,应该如:
<?XML version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="192.168.39.209" />
<allow-access-from domain="*.DomainB.com" />
</cross-domain-policy> 放置后,crossdomain.XML文件应该可以这样访问:http://domainA.com/crossdomain.xml
好了,这样做就可以跨域连接Remoting Service了。
下边是具体测试代码:
1.Client端
Client端的Swf发布在192.168.39.209。
Swf 文件:
场景中放置了一个txt的动态文本框,然后在第一帧加入如下代码(AS2.0写法):
import mx.remoting.Service;
import mx.rpc.RelayResponder;
import mx.remoting.PendingCall;
import mx.rpc.ResultEvent;
import mx.rpc.FaultEvent;
/**//*import mx.remoting.debug.NetDebug;
NetDebug.initialize();*/
import mx.services.Log;
function sayGreeting_Result(evt:ResultEvent):Void
{
txt.text = evt.result;
}
function sayGreeting_Fault(evt:FaultEvent):Void
{
//trace("Error: "+evt.fault.__faultstring);
txt.text = evt.fault.faultstring;
}
var gatewayPath = "http://192.168.39.109/MyRemoting/gateway.ASPx";
var myResponder = new RelayResponder(this, "sayGreeting_Result", "sayGreeting_Fault");
//var service:Service = new Service(gatewayPath, new Log(), "MyRemoting", null, myResponder);
var service:Service = new Service(gatewayPath, null, "MyRemoting", null, myResponder);
var mypc:PendingCall = service.test("Yao.NET");
2.Server端
Remoting Service发布在192.168.39.109,IIS中创建MyRemoting虚拟目录,此目录下有gateway.ASPx,web.config,test.ASPx文件及Bin目录,其中Gateway.ASPx,web.config文件直接从Flashremoting的samples下复制过来即可。
test.ASPx文件:
<%@ Page language="c#" debug="true" %>
<%@ Register TagPrefix="Macromedia" Namespace="FlashGateway" Assembly="Flashgateway" %>
<Macromedia:Flash ID="Flash" Runat="Server" />
<%
String message = "你好呀:";
if (Flash.Params.Count > 0)
{
message += Flash.Params[0].ToString();
}
Flash.Result = message;
%>web.config中配置:
Bin目录:
中有Flashgateway.dll,frconfig.txt,wsdl.exe(此实例中非必须)文件,前两个文件也是直接从Flashremoting的samples下复制过来即可。
---------------------------------------
以上代码,swf在Flash8中编写,test.ASPx在vs.net 2003中编写,均测试通过。
最后在此感谢Peter~