Pregunta

Me gustaría saber cómo se manejan los hilos en el lado del servidor usando objetos MarshalByRef.

Dada mi clase MarshalByRef remoted:

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

El código de cliente (single roscado):

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

En el lado del servidor, tenemos las dos operaciones de escritura. Asumo que el hilo es del ThreadPool. Sin embargo, ya que la clase es MarshalByRef, ambos opeations son llamadas a procedimientos remotos separados. Van a ejecutar en hilo separado? En caso afirmativo, ¿puede ocurrir que la operación 2 va a ser ejecutada antes de la operación 1 acabados?

PS: Hacer MyRemotedClass MarshalByRef es mala decisión. Pero no se me permite cambiar eso, por lo que no proponen que.

¿Fue útil?

Solución

No soy un experto en esto, pero realmente me espero de la escritura a MyInt haber completado de manera fiable antes de que el evento de cliente intenta escribir en MyString a menos que tenga alguna asíncrono cobarde comportamiento pasando.

Después de todo, si la asignación falla por alguna razón la única manera sensata de manejo que se va a lanzar una excepción antes de proceder, la OMI.

Otros consejos

De hecho, en lo que me gustaría pensar en ello, el establecimiento de las 2 propiedades no está sucediendo de forma asíncrona, por lo que el cliente está esperando hasta que la primera RPC se terminó antes de que se iniciará con RPC 2.

De todos modos, si su MyRemotedClass no está configurado como un objeto activada en el servidor único, también tener en cuenta que por cada RPC que usted hace en MyRemotedClass, una nueva instancia se creará en el servidor. Eso significa que el objeto remoto no debe contener ningún estado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top