Ich versuche, einen Proxy für einen Thread (im Hintergrund) zu öffnen, der Thread erstellt eine neue Instanz des Proxy, ruft eine Methode des Dienstes und sofort nach dem Dienst verfügbar.Starten mehrerer Dienste auf Threads
All dies geschieht in einem 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();
Ich halte intermittierende Timeout Probleme zu sehen, passiert, obwohl ich das Timeout auf max für Close eingestellt haben, Opentimeout, ReceiveTimeout, Sendtimeout.
Ich möchte nur sicherstellen, Design-weise ist dies kein Problem, d. H. Einen Dienst auf einem Thread zu öffnen und zu entsorgen?
EDIT:
Proxy stellt intern einen Kanal mit benutzerdefinierten für jeden Thread auf unterschiedlichen Endpunkte zu binden.
Es ist ein wenig verwirrend, dass man von „Service“ sprechen, wo ich erwarten würde „Proxy“ (oder auch „Client“), z.B. "Der Thread öffnet den Dienst" sollte "der Thread öffnet einen Proxy für meinen Dienst", richtig? – Jeroen
Sorry, ich habe gerade die Frage aktualisiert, also im Grunde ist mein Dienst bereits geöffnet, aber ja, der Proxy ruft nur den proxy.Channel.StartWork (workload); von diesem bestimmten Dienst (der bereits selbst gehostet ist) - macht Sinn? –
möchten Sie möglicherweise eine "finally" zu Ihrer try-catch-Klausel hinzufügen. führt schließlich Code aus, obwohl eine Ausnahme ausgelöst wird. In Bezug auf dein Problem bin ich unsicher. Ich glaube auch, dass es klug wäre, Ihre Bindung in den Konstruktor zu übergeben. Dies könnte die Ursache für Ihre Zeitüberschreitungsausnahme sein. –