Domanda

Vorrei sapere come vengono gestite le discussioni sul lato server utilizzando oggetti MarshalByRefObject.

Data la mia telecomandato classe MarshalByRefObject:

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

Il codice client (singolo thread):

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

Sul lato server, abbiamo le due operazioni di scrittura. Si considera che il filo sia dalla ThreadPool. Tuttavia, poiché la classe è MarshalByRefObject, entrambe opeations sono chiamate di procedura remota separati. Stanno andando a funzionare su thread separato? Se sì, può accadere che il funzionamento 2 sta per essere eseguito prima del funzionamento 1 finiture?

PS: Fare MyRemotedClass MarshalByRefObject è decisione sbagliata. Ma non mi è permesso di cambiare la situazione, quindi per favore non propongo.

È stato utile?

Soluzione

Io non sono un esperto su questo, ma mi piacerebbe davvero aspetto la scrittura per MyInt di aver completato in modo affidabile prima che l'evento client tenta di scrivere a MyString meno che non hai un po 'funky asincrono comportamento in corso.

Dopo tutto, se l'assegnazione non riesce per qualche motivo l'unico modo sensato di gestione che è quello di generare un'eccezione prima di procedere, IMO.

Altri suggerimenti

In effetti, per quanto io avrei pensato, impostando le 2 proprietà non sta accadendo in modo asincrono, in modo che il cliente è in attesa fino a quando il primo RPC è finito prima che inizierà con RPC 2.

In ogni caso, se il vostro MyRemotedClass non è configurato come un oggetto attivata dal server Singleton, anche tenere a mente che per ogni RPC che si fa su MyRemotedClass, una nuova istanza verrà creata sul server. Ciò significa che l'oggetto remoto non dovrebbe contenere qualsiasi stato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top