2009-04-21 15 views
12

In un intervallo pianificato devo chiamare un servizio WCF per chiamare un altro servizio WCF in modo asincrono. Pianificazione di una chiamata a un servizio WCF che ho elaborato.È necessario un esempio di attivazione e una chiamata asincrona al servizio WCF

Quello che penso di cui ho bisogno e ho letto su qui su StackOverflow che è necessario .., (in sostanza) preparare o modificare il codice dei servizi WCF in modo da essere in grado di gestire una chiamata asincrona a loro. Se sì, quale sarebbe un semplice esempio di questo? (Forse un esempio precedente e successivo) Inoltre è ancora necessario in .Net 3.5?

Secondo Sto utilizzando un proxy dal servizio WCF che effettua la chiamata al servizio WCF successivo e ho bisogno di un esempio di chiamata asincrona a un servizio WCF se sembra diverso da quello tipico di BeginEnvoke e EndEnvoke con async tipico esempi.

Vorrei crederci se sono completamente fuori dalla mia domanda e apprezzerei qualsiasi correzione per stabilire una domanda migliore.

+0

Un sacco di grandi campioni su [IDesign.net] (http://idesign.net/idesign/DesktopDefault.aspx?tabindex=5&tabid=11#ConcurrencyManagement) inclusi esempi di gestione della concorrenza. –

risposta

22

Impostare la proprietà IsOneWay dell'attributo OperationContract su true nel metodo WCF a cui si sta chiamando. Questo dice a WCF che la chiamata conta solo per una direzione e che il client non si bloccherà in attesa che il metodo finisca di essere eseguito.

Anche quando si chiama BeginInvoke, il codice del client si bloccherà ancora in attesa del completamento del processo da parte del metodo server, ma lo farà su un thread del thread.

[ServiceContract] 
interface IWCFContract 
{ 
    [OperationContract(IsOneWay = true)] 
    void CallMe() 
} 

L'altro modo di fare ciò che si desidera è di avere il servizio WCF girare il suo lavoro fuori su un thread in background e ritornare immediatamente.

+0

Il client può ancora essere bloccato finché il messaggio (chiamata metodo) non viene ricevuto dal servizio. in base alle definizioni di concorrenza del servizio e/o all'esistenza di una sessione di trasporto. – Menahem

7

Assicurarsi di testare attentamente il modo in cui una chiamata OneWay WCF esegue. L'ho visto stallo quando raggiungi il numero X di chiamate simultanee, come se in realtà WCF attenda il termine della chiamata.

Una soluzione più sicura è avere il controllo di ritorno del codice "target" AL PIÙ PRESTO: invece di lasciare che elabori completamente la chiamata, è sufficiente mettere i dati in una coda e restituire. Avere un altro thread poll esegue il polling e lavora sui dati in modo asincrono.

E assicurarsi di applicare un meccanismo di sicurezza del filo per evitare gli scontri tra i due thread che lavorano su quella coda.

0

Non utilizzare BeginInvoke o anche un thread per il pattern. Assicurati di decorare le tue classi con AsyncPattern in base al sito Web di Microsoft, altrimenti i delegati Async e i thread verranno eseguiti in modalità sincrona. WCF forza questo comportamento. Queste informazioni sono state pubblicate da un altro operatore che ha trovato una soluzione per bloccare la domanda di callback sullo stack .. scusa ma non ricordo il collegamento.

Problemi correlati