Alternative API Web per salvare un file nel file system del server

0

Abbiamo una versione Enterprise di SQL Server 2012 e un servizio Web API 2.2 Web ASP.NET. L'API Web è l'interfaccia pubblica per il database.

Dobbiamo terminare un ordine di produzione facendo:

  1. Modifica di un valore nella tabella degli ordini di produzione.
  2. Genera un XML con tutti i dati relativi a questo ordine di produzione.
  3. Salva il file XML nel file system del server.

Ho pensato di farlo con un'API POST to Web, ma non so se devo fare i tre passaggi precedenti (Cambiare valore, generare XML e salvarlo) in una stored procedure o forse nel web Controller API.

Forse, se lo faccio con il controller API, ci vorrà molto tempo e il client andrà in time.

    
posta VansFannel 05.02.2015 - 12:28
fonte

2 risposte

1

I tuoi tre passaggi appartengono al Modello, non al Controller.

Se si tratta di un'operazione di lunga durata, renderla asincrona. Vedi Utilizzo dei metodi asincroni in ASP.NET MVC 4 e C # 5, ASP.NET MVC 4 e applicazioni Web asincrone per maggiori informazioni.

    
risposta data 05.02.2015 - 15:55
fonte
1

Se questo processo richiede davvero molto tempo, puoi anche considerare di interrompere il lavoro a lungo termine.

Ad esempio, quando la richiesta viene gestita dall'API Web, è possibile scrivere un messaggio in qualcosa come una coda messaggi e fare in modo che MSMQ sul server attivi un processo separato per eseguire qualsiasi operazione indicata da tale messaggio.

Il modo in cui questo lavoro può essere eseguito è di tipo ortogonale qui - forse una stored procedure funziona meglio nel tuo caso, o forse un'app di driver per eseguire la logica di business codificata in una libreria di classi, ecc. Il punto è che puoi fare questo lavoro senza doversi preoccupare di essere nel contesto di un thread di API Web: è possibile tornare immediatamente al client e non è necessario attendere il completamento del processo in esecuzione prolungata e non è necessario preoccuparsi di timeout sulla loro connessione, ecc.

Il chiamante può quindi eseguire il polling per l'aggiornamento dello stato sul lavoro, oppure è possibile utilizzare i socket Web per reindirizzare lo stato al chiamante o persino utilizzare una coda messaggi separata per scrivere i messaggi di completamento che il chiamante sta monitorando, ecc.

Ovviamente questo può funzionare solo se il chiamante è disposto ad accettare un flusso di lavoro completamente asincrono:)

    
risposta data 06.02.2015 - 00:53
fonte

Leggi altre domande sui tag