Ho una funzione .NET che esegue alcuni calcoli complessi. A seconda dei parametri che vengono passati in, funzione:Consigli per la progettazione di un servizio Web a lunga esecuzione e ad uso intensivo di risorse
- impiega da diversi minuti a diverse ore per eseguire
- utilizza il 100% di un singolo nucleo durante la computazione
- Richiede ovunque da 100s di MB a diversi GB di memoria
- Scrive ovunque da diversi MB a diversi GB di dati su disco
- potrebbe generare un'eccezione, tra cui un OutOfMemoryException
La quantità di dati da scrivere sul disco può essere prevista con precisione dalla parametrizzazione della funzione. Non esiste un modo semplice per prevedere gli altri requisiti di risorse dalla parametrizzazione delle funzioni.
ho bisogno di esporre questa funzione tramite un servizio web. Questo servizio deve essere:
- pavimento robusto e con grazia segnalare eventuali problemi durante il calcolo
- In grado di gestire richieste simultanee, finché ci sono risorse sufficienti per gestire la richiesta senza degrado significativo delle prestazioni, e di negare con grazia la richiesta in caso contrario.
Ho intenzione di gestire la natura di lunga durata facendo in modo che la richiesta iniziale restituisca una risorsa di stato che può essere interrogata per il progresso. Una volta completato il calcolo, questa risorsa fornirà la posizione dei dati di output, che il client può scaricare (probabilmente tramite FTP).
sono meno chiare sul modo migliore per gestire gli altri requisiti. Sto considerando una sorta di "pool di calcolo" che mantiene le istanze della calcolatrice e tiene traccia di quali sono attualmente in uso, ma non ho capito i dettagli.
Qualcuno con esperienza di situazioni simili ha qualche suggerimento? Finché la soluzione può essere eseguita su una casella di Windows, tutte le opzioni tecnologiche possono essere considerate.
Sia VladV sia Steven hanno fornito risposte molto utili. Sono autorizzato a contrassegnare una sola risposta come accettata, quindi ho scelto VladV in base al numero di voti al momento di scrivere questo commento. – Akash