Problema com o arquivo de política para o ActionScript 3 xmlsocket
-
25-09-2019 - |
Pergunta
Desenvolvemos um servidor personalizado no .NET para hospedar algumas funções básicas de bate -papo/IM para o nosso site, e o cliente está escrito no Flex (AS3) usando o XMLSocket.
Agora, temos 2 servidores, um dedicado a enviar arquivos de política puramente e um manuseio de funções de IM/Chat.
O problema é que podemos ver o cliente conectando, o arquivo de política é enviado, mas o Flash ignora o arquivo de política e o solicita novamente do nosso servidor de bate -papo/IM.
Arquivo de Política:
<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*" to-ports="*" secure="false"/>
</cross-domain-policy>
Servidor de Políticas:
Server.LogMessage("Policy Server: Serving policy file.");
TcpListener listener = (TcpListener)ar.AsyncState;
Socket client = listener.EndAcceptSocket(ar);
NetworkStream ns = new NetworkStream(client);
StreamReader sr = new StreamReader(ns);
StreamWriter sw = new StreamWriter(ns);
sr.Read();
//Send policy
sw.Write(Server.EncodeString(Server.xmlPolicyFile.OuterXml) + "\0");
sw.Flush();
ns.Flush();
//Cleanup
sw.Close();
sr.Close();
ns.Close();
//Do it again!
tcl.BeginAcceptSocket(AcceptCallback, tcl);
Solução
A política de domínio cruzado funciona apenas para o servidor está ativado ... Você não pode ter um servidor que serve a política para um servidor diferente ... o que impediria um vilão criar uma política para sua máquina e roubar seus dados.
Você precisará ter a política servida no servidor correto.
Outras dicas
Obrigado Gergor, mas o que eu quis dizer é que abrimos um servidor dedicado a enviar arquivos de política e outro para lidar com conexões reais (ambas na mesma máquina).
O problema era que você precisa enviar imediatamente o arquivo de política sem fazer mais nada no servidor de políticas.