Pergunta

Eu tenho um aplicativo Flex que chama uma função que procura uma grande coleção de documentos. Dependendo do termo de pesquisa, o usuário pode querer parar o pedido de flex.

Eu gostaria de não só interromper o aplicativo Flex de esperar o pedido, mas também para impedir a solicitação de CFC. Isso é possível? Qual é a melhor abordagem para fazer isso?

Foi útil?

Solução

Para adicionar sobre a resposta de Ben Doom, estou incluindo um código de exemplo de uma forma isso pode ser feito. Existem várias abordagens e formas de nomes, organização e chamando o código abaixo, mas espero que seja útil.

Em algum momento durante a solicitação de início, armazenar informações sobre o processo no escopo compartilhado e retornar um ID para o cliente. Aqui estão exemplos de funções que poderiam ser utilizados na página ou remotos pedidos.

<cffunction name="createProcess" output="false">
  <cfset var id = createUUID()>
  <cfset application.processInfo[id] = {
    progress = 0,
    kill = false
  }>
  <cfreturn id />
</cffunction>

O cliente pode então verificar o progresso servidor de votação, ou enviar solicitação para processo kill

<cffunction name="getProcessProgress" output="false">
  <cfargument name="processID" required="true">
  <cfreturn application.processInfo[arguments.processID].progress />
</cffunction>

<cffunction name="killProcess" output="false">
  <cfargument name="processID" required="true">
  <cfset application.processInfo[arguments.processID].kill = true />
</cffunction>

O processo do lado do servidor real em questão pode, em seguida, bateu uma função, por exemplo, durante um loop, para verificar se ele deve abortar o processamento e limpeza nenhum trabalho conforme o caso.

<cffunction name="shouldKillProcess" output="false">
  <cfargument name="processID" required="true">
  <cfreturn application.processInfo[arguments.processID].kill />
</cffunction>

Outras dicas

Eu não acho que há um direto maneira de parar uma chamada de página externamente. De acordo com os documentos, apenas o próprio fio e é pai pode abortar um determinado segmento.

No entanto, você pode definir um sinalizador para um determinado segmento em um escopo compartilhado.

Vamos dizer que você chamar um método que começa algum processamento em background. Ele gera um ID da thread único e retorna para o chamador. Os olhares de rosca para uma bandeira em (por exemplo) o escopo aplicativo que diz-lhe para parar. Ele verifica em cada etapa parcial do processo de fundo. Ele poderia abortar em qualquer ponto que a bandeira é lançada.

Para lançar a bandeira, adicionar um método de aborto que leva o nome do segmento que deve ser abortada, juntamente com a segurança suficiente para certificar-se de um 3o partido não pode simplesmente começar a matar threads.

Se você estiver usando ColdFusion 8 você pode fazer uso da tag <cfthread>. Você pode gerar o processo de pesquisa fora em seu próprio segmento e, em seguida, usar a chamada remota para encerrar o segmento de pesquisa, conforme necessário.

Você pode programaticamente solicitações com qualquer <cfabort/> ou <cfsetting requesttimeout="0"/> acabar - mas que está no lado do servidor CF das coisas, que eu não acho que é o que você está pedindo

Terminar-lo remotamente ... bem, se você tem FusionReactor ele pode ser possível contato que usando Flex e tê-lo interromper o pedido para você. (Você pode certamente tentar pedidos dentro FusionReactor acabar, mas se ou não Flex pode realmente pedir FR para pará-lo ... você teria que perguntar que na lista FR discussão se há uma maneira de fazer isso.)


Possivelmente uma solução alternativa é tentar e arquiteto da pesquisa de modo que ele funciona através de vários pedidos, mas como viável que é vai depender exatamente o que você está procurando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top