C'è un modo per configurare un servizio WCF per creare una nuova discussione per gestire qualsiasi nuova richiesta in entrata?Servizio WCF che crea un nuovo thread per ogni nuova richiesta
risposta
No, perché non vorrai mai farlo. Cosa stai cercando di ottenere davvero?
EDIT
Sulla base di ulteriori informazioni in arrivo, ecco cosa penso.
Se si desidera solo "stato permanente" per richiesta, è necessario utilizzare lo stato nell'istanza e utilizzare InstanceContextMode.PerCall, come da risposta di marc_s.
Se è necessario un po 'di stato nella memoria locale thread per la chiamata, è possibile considerare l'utilizzo di ICallContextInitializer come metodo per eseguire il marshalling dello stato sul thread selezionato da WCF per richiamare il metodo su (e pulire lo stato del thread quando la chiamata finisce).
Ma non dovresti preoccuparti di "quale thread". WCF gestirà ciò con un pool di thread per conto dell'utente.
Potresti spiegarci un po 'di più? –
L'idea è di condividere sessioni, credenziali, ecc. Db all'interno di una richiesta memorizzandole in ThreadContext. Questo ci aiuterà nel fare rollback, ecc. – Nazgul
ovviamente è possibile - in realtà è persino la best practice raccomandata! Il ServiceHost ha un pool di thread di lavoro per questo esatto scopo –
Sì, è possibile farlo: si chiama gestione "per chiamata" delle richieste. ServiceHost creerà una nuova istanza della classe di servizio per ogni richiesta in arrivo per gestire quella richiesta.
Per fare questo, è necessario impostare la classe di servizio (quello che implementa l'interfaccia di servizio) di essere "PerCall" - si esegue questa operazione mediante l'applicazione di un attributo sul tuo classe di servizio:
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
public class YourService : IYourService
{
...
}
Marc
Ciò creerà una nuova istanza del servizio per chiamata, ma non genera un nuovo thread per chiamata. – Nazgul
ma assegnerà la nuova istanza di servizio a un thread di lavoro per gestire la richiesta ...... –
Non penso che tu possa fare più di questo. Non conosco alcuna impostazione in WCF per creare in modo specifico un nuovo thread per ogni richiesta. E perché vorresti davvero ?? La creazione di un thread completo è un'operazione piuttosto costosa - perché non utilizzare il pool integrato di thread di lavoro che sono già disponibili? –
dipende da che cosa esattamente si vuole, ma il seguente comportamento di servizio risolveremo:
ServiceBehavior:
ConcurrencyMode=ConcurrencyMode.Multiple
InstanceContextMode=InstanceContextMode.Single
la classe sarà un Singleton, ma tutte le chiamate effettuate verso i metodi verrà eseguito in una SEPAR mangiato filo. Se hai bisogno di una sincronizzazione, devi farlo manualmente.
Inoltre, non dimenticare di esaminare la limitazione per essere consapevoli dei potenziali problemi di prestazioni.
- 1. Perché connect-mongo crea una nuova sessione per ogni richiesta?
- 2. Javascript Crea nuovo "Thread"
- 3. Perché Rails crea un controller per ogni richiesta?
- 4. Servizio dati WCF - Errore richiesta
- 5. Express.js/App Passport che crea una nuova sessione per ogni richiesta, nonostante l'ID di sessione nelle intestazioni di richiesta
- 6. Servizio WCF vs servizio Windows
- 7. IE crea un nuovo ambito per ogni tag di script?
- 8. Anaconda crea una variabile PYTHONPATH separata per ogni nuovo ambiente?
- 9. startActivity che crea ogni volta una nuova istanza di attività
- 10. WCF Operation.Context not Thread safe?
- 11. Esiste una nuova istanza controller per ogni richiesta?
- 12. Errore servizio WCF 400 richiesta errata
- 13. WCF: Che cos'è un servizio di assistenza?
- 14. L'uso di async/await crea un nuovo thread?
- 15. Jinja2: Crea una nuova riga per ogni 3 articoli
- 16. Ogni richiesta accede allo stesso oggetto servlet?
- 17. Crea notifica ogni giorno
- 18. Servizio WCF che restituisce un altro servizio (fabbrica di servizi?)
- 19. Una chiamata asincrona crea sempre/chiama un nuovo thread?
- 20. Beego: creazione di un nuovo orm prima di ogni richiesta?
- 21. Forza WCF per chiamare un metodo su ogni richiesta prima di immettere la funzione effettiva
- 22. L'uso di X509 per la sicurezza WCF è intrinsecamente lento con un nuovo canale per richiesta?
- 23. Un servizio WCF è un servizio Web?
- 24. Servizio WCF che espone DTO o entità
- 25. Codeigniter che crea una nuova sessione per ogni caricamento della pagina
- 26. PID per nuovo thread
- 27. Servizio WCF vs servizio Windows
- 28. WCF CreateChannel per ogni chiamata di metodo
- 29. Servizio WCF REST: InstanceContextMode.PerCall non funziona
- 30. Passare un nuovo oggetto locale a un thread, thread-safe?
La WCF non sta facendo questo? – Jehof
no, non di default – Nazgul