Pergunta

Gostaria de saber como tópicos são tratados no lado do servidor usando MarshalByRef objetos.

Dada a minha classe MarshalByRef remoted:

public class MyRemotedClass : MarshalByRef
{
  public int MyInt;
  public string MyString;
}

O código do cliente (single threaded):

MyRemotedClass m = GetSomehowMyRemotedClass(); 
m.MyInt = 5; // Write operation 1
m.MyString = "Hello World"; // Write operation 2

No lado do servidor, temos as duas operações de gravação. Presumo que o segmento é do ThreadPool. No entanto, uma vez que a classe é MarshalByRef, ambos opeations são chamadas de procedimento remoto separadas. eles vão correr em segmento separado? Se sim, pode acontecer que a operação 2 vai ser executada antes da operação 1 termina?

PS: Fazendo MyRemotedClass MarshalByRef é má decisão. Mas eu não estou autorizado a mudar isso, então por favor não propor isso.

Foi útil?

Solução

Eu não sou um especialista sobre isso, mas eu realmente esperar a gravação para MyInt ter concluído de forma confiável antes das tentativas de eventos cliente para escrever para MyString menos que você tenha algum assíncrona funk comportamento acontecendo.

Afinal, se a atribuição falhar por algum motivo a única maneira sensata de lidar com isso é para lançar uma exceção antes de prosseguir, IMO.

Outras dicas

Na verdade, tanto quanto eu poderia pensar sobre isso, definindo os 2 propriedades não está acontecendo de forma assíncrona, para que o cliente está esperando até o dia 1º RPC está terminado antes de começar com RPC 2.

De qualquer forma, se o seu MyRemotedClass não está configurado como um objeto servidor ativado Singleton, também ter em mente que para cada RPC que você faz no MyRemotedClass, uma nova instância será criada no servidor. Isso significa que o objeto remoto não deve conter qualquer estado.

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