Apesar de não ser universalmente usado como o ACSE, o ROSE é muito usado pelas entidades de serviço de aplicação de propósito geral.
O ROSE é utilizado para suportar tipos interativos de aplicações, as quais são caracterizadas por um request de uma aplicação para outra aplicação para executar alguma operação. No campo programming, um exemplo comum deste mecanismo é a chamada de procedure remota.
O serviço básico provido pelo ROSE é a facilidade de invocar uma operação sobre um sistema aberto remoto. A entidade aplicação (AE) invoca a operação emitindo um request para uma igual AE, especificando uma operação particular a ser executada. A outra AE tenta executar a operação e pode reportar o resultado da tentativa. A troca entre as duas entidades é conduzida fora do contexto da associação de aplicação.
As operações invocadas por uma entidade de aplicação (o invoker) são executadas por outra entidade de aplicação (o performer). A interação entre duas entidades que resulta numa tentativa de inicio de operações é caracterizada por uma classe de operações, a qual está combinada entre as duas entidades para cada invocação separada. A classe de operação é definida por duas características de troca (permuta): o procedimento reportado da AE tentando a operação e se a troca é síncrona ou assíncrona.
CLASSES DE OPERAÇÃO DO ROSE
Classe de operação 1
Modo reportado: se ocorre sucesso, retorna uma resposta com o resultado. Se ocorre uma falha, retorna uma resposta com o erro.
Modo de operação: síncrono
Classe de operação 2
Modo reportado: se ocorre sucesso, retorna uma resposta com o resultado. Se ocorre uma falha, retorna uma resposta com o erro.
Modo de operação: assíncrono
Classe de operação 3
Modo reportado: se ocorre sucesso, não responde. Se ocorre falha, retorna uma resposta com o erro.
Modo de operação: assíncrono
Classe de operação 4
Modo reportado: se ocorre sucesso, retorna uma resposta com o resultado. Se ocorre falha, não responde.
Modo de operação: assíncrono
Classe de operação 5
Modo reportado: se ocorre sucesso, não responde. Se ocorre falha, não responde.
Modo de operação: assíncrono
A AE que estiver executando a operação pode observar um dos quatro tipos de procedimentos reportados:
Se o resultado, sucesso ou falha, é sempre reportado, então a AE invocada tem a opção de aguardar ou não um report antes de continuar com operações síncronas, o invoker requer uma resposta da execução antes de invocar outra operação. Com operações assíncronas, o invoker pode continuar invocando operações sem esperar uma resposta.
O ROSE pode ser usado por duas entidades de aplicação que dividem uma aplicação de associação invocando uma ou mais operações. A AE que inicia uma associação de aplicação é chamada de association initiator, considerando que a AE que responde ao request é chamada de association responder. As duas AEs devem concordar sobre uma das três classes de associações que empregará durante a associação:
A classe de associação é um atributo de um contexto da aplicação e deve ser selecionada quando a associação é estabelecida usando o ACSE.
Quando a classe de associação 3 é selecionada, é possível agrupar operações dentro de um conjunto de operações de linked, o qual é fornecido por uma operação pai e uma ou mais operações filhas. A seqüência é a seguinte:
1. Uma AE invoca uma operação sobre outra AE, referida como operação pai.
2. O executor da operação pai pode invocar nenhuma, uma ou mais operações filhas durante a execução da operação pai. Desta maneira, cada uma dessas operações filhas é executada pela AE que é o invoker da operação pai correspondente.
3. Cada operação filha pode funcionar como uma operação pai para disparar nenhuma, um ou mais operações filhas de uma forma recursiva.
O serviço de operações remotas é definido no X.219 e na ISO9072-1.
A primitiva RO-INVOKE é usada para o invocador requisitar uma operação do executador.
As primitivas RO-RESULT são usadas para prover uma resposta no evento de uma operação bem sucedida. O parâmetro result prove informações relativas a execução bem sucedida de uma operação e é superior ao escopo do ROSE.
As primitivas RO-ERROR são usadas para prover uma resposta no evento de uma operação mal executada. O parâmetro error-value indica o tipodo erro, e o parâmetro error prove informações adicionais sobre o erro. Ambos os parâmetros são superiores ao escopo do ROSE.
O serviço RO-REJECT-U é usado por um usuário do ROSE para rejeitar um request (RO-INVOKE) se o usuário detectar um problema. Pode também ser usado para rejeitar uma resposta (RO-RESULT, RO-ERROR).