26 messaggi dal 22 dicembre 2011
Salve, la chiamata ai metodi di una istanza del servizio da parte di un client avviene in modo asincrono?cioè ogni metodo chiamato viene eseguito in un thread diverso?
5.610 messaggi dal 09 febbraio 2002
Contributi
Ciao, questo è a discrezione di chi sviluppa il client.

Ad esempio, se il client è un'applicazione .NET creata con Visual Studio, lo sviluppatore potrà decidere se creare le sue classi proxy con metodi sincroni (impostazione di default) o asincroni.

Questo si decice nel momento in cui si referenzia il servizio.
Dal solution explorer, tasto destro sul progetto -> Add Service Reference... -> Advanced... -> Spunta su Generate asynchronous operations.

Questa immagine illustra la schermata a cui faccio riferimento. Se ti dovesse servire, leggi questo articolo che spiega come consumare un servizio WCF in maniera asincrona.
http://dotnetspeaks.com/DisplayArticle.aspx?ID=34
Modificato da BrightSoul il 27 dicembre 2011 22.35 -

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
26 messaggi dal 22 dicembre 2011
ma se uso ConcurrencyMode.Multiple non lo fa in modo automatico ad istanziare un nuovo thread per ogni call?
5.610 messaggi dal 09 febbraio 2002
Contributi
pippo87 ha scritto:
ma se uso ConcurrencyMode.Multiple non lo fa in modo automatico ad istanziare un nuovo thread per ogni call?


Sì ma questa configurazione riguarda la generazione di thread sul server.
Se non ho capito male tu hai chiesto se l'invocazione di un metodo del servizio, dal client, fosse sincrona o asincrona. Nel caso sia asincrona, l'esecuzione avviene in un nuovo thread sul client lasciando quello corrente, che di solito è il thread della UI, libero di continuare.
Modificato da BrightSoul il 28 dicembre 2011 00.34 -

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
26 messaggi dal 22 dicembre 2011
no scusami allora mi sono espresso male, intendevo l'invocazione dei metodi sul server se avveniva in un nuovo thread in modo automatico.

Comunque sul client invoco tutti i metodi dall'UI thread poichè gli avevo definiti con la proprietà IsOneWay=true.
5.610 messaggi dal 09 febbraio 2002
Contributi
pippo87 ha scritto:
Comunque sul client invoco tutti i metodi dall'UI thread poichè gli avevo definiti con la proprietà IsOneWay=true.


ok. Invece, nel server, viene sempre creato un nuovo thread ma con l'attributo ServiceBehavior e i suoi parametri InstanceContextMode e ConcurrencyMode puoi regolare il numero di thread che possono essere creati contemporaneamente.

Ipotizza di aver configurato il servizio così:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Single)]
public class MyService : IService
In questo modo ammetti una sola istanza (singleton) che viene riutilizzata per ogni utente e, siccome la ConcurrencyMode è impostata a Single, solo un thread alla volta potrà essere creato per quell'istanza. Così crei una sorta di "coda allo sportello" in cui un solo cliente alla volta può essere servito.

Invece, configurandolo così:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Single)]
public class MyService : IService
già fai in modo che il servizio possa servire più richieste contemporaneamente. Il massimo numero di thread creati sarà 1 per utente, quindi immaginati tanti "sportelli" quanti sono i clienti da servire.

Configurato in questo modo:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple)]
public class MyService : IService
ciascun utente potrà eseguire più chiamate contemporanee al servizio. Immaginati che per ogni cliente, allo sportello, ci siano più impiegati in grado di svolgere contemporaneamente le varie richieste di quel cliente.

Comunque, parti da qui:
http://msdn.microsoft.com/en-us/library/ms731193.aspx
Poi ci sono altri articoli su Session e Concurrency.
http://msdn.microsoft.com/en-us/library/ms751429.aspx
http://www.codeproject.com/KB/WCF/Sessions_in_WCF.aspx
http://msdn.microsoft.com/en-us/library/ms752260.aspx

Assicurati che il tuo servizio sia thread-safe prima di usare la ConcurrencyMode.Multiple.

ciao
Modificato da BrightSoul il 28 dicembre 2011 12.41 -

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
26 messaggi dal 22 dicembre 2011
grazie mille per tutto :)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC