Sto tentando di aprire un proxy su un thread (in background), il thread crea una nuova istanza del proxy, chiama un metodo del servizio e immediatamente dopo elimina il servizio.Avvio di più servizi sui thread
Tutto questo avviene su un thread:
var background = new Thread(() =>
{
var proxy = new AssignmentSvcProxy(new EndpointAddress(worker.Address));
try
{
proxy.Channel.StartWork(workload);
proxy.Dispose();
}
catch (EndpointNotFoundException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (CommunicationException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (TimeoutException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (Exception ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
}) { IsBackground = true };
background.Start();
Continuo a vedere problemi di timeout intermittenti che accadono anche se ho impostato il timeout al massimo per CloseTimeout, OpenTimeout, ReceiveTimeout, SendTimeout.
Voglio solo assicurarmi che il design non sia un problema, ad esempio aprire un servizio su un thread e smaltirlo?
EDIT:
Proxy stabilisce internamente un canale con rilegatura personalizzata su diversi punti finali per ciascun filo.
E 'un po' di confusione che si parla di "servizio", dove mi aspetto "Proxy" (o anche "Cliente"), ad esempio, "il thread apre il servizio" dovrebbe essere "il thread apre un proxy per il mio servizio", giusto? – Jeroen
Mi spiace, ho appena aggiornato la domanda, quindi in pratica il mio servizio è già aperto ma sì il proxy chiama semplicemente proxy.Channel.StartWork (carico di lavoro); di quel particolare servizio (che è già auto-ospitato) - ha senso? –
potresti voler aggiungere un 'finally' alla tua clausola try-catch. infine esegue il codice anche se viene generata un'eccezione. Per quanto riguarda il tuo problema, sono incerto. Credo anche che sarebbe saggio passare la tua associazione nel costruttore. questa potrebbe essere la causa della tua eccezione di timeout. –