Ich arbeite an einem Codeabschnitt, der eine API-Anforderung an einen WebAPI-Controller übernehmen und dadurch einen WCF-Webdienst aufrufen würde. Dies würde blockieren, bis der WCF-Dienst reagiert und Probleme wie Timeouts und Leistungsprobleme verursacht. Ich kann Async/-App nicht für diesen speziellen Anwendungsfall aus einer Reihe von Gründen verwenden, die außerhalb meiner Kontrolle liegen.Rufen Sie den WCF-Dienst von einem Hintergrundthread an
Ich suche diesen WCF Anruf aus auf einem separaten Thread zu treten, so in der WebAPI Controller ich etwas tun:
New Thread(()=>{
//Call WCF service here
//Do something with the response
}).Start();
jedoch der Code Sprengung. Die Zeile, die den WCF-Dienst aufruft, wurde unverändert in den obigen Codeblock verschoben, aber jetzt erhalte ich:
Zugriff auf ein entsorgtes Objekt nicht möglich. Objektname: 'System.ServiceModel.Channels.ServiceChannel'.
am Stack-Trace der Suche, wenn die Ausnahme ausgelöst wird, kann ich den Server-Stack-Trace sieht wie folgt aus:
Server-Stack-Trace: bei System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrImmutable() bei System.ServiceModel.Channels.CommunicationObject.Open (Timespan timeout) bei System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call (ServiceChannel Kanal, Span timeout) bei Syst em.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce (Timespan Timeout, CallOnceManager Kaskade) bei System.ServiceModel.Channels.ServiceChannel.Call (String action, Boolesche Einwege, ProxyOperationRuntime Betrieb Object [] in, Object [] outs, Timespan Timeout) bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage method, ProxyOperationRuntime Betrieb) bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke (IMessage Nachricht)
im nicht sehr groß erfahrenen mit WCF so fragte sich, ob es etwas komisch in Bezug auf cal war Ling diesen Service in einem Hintergrund Thread oder wenn es etwas anderes musste ich stattdessen tun?
Ich habe versucht, diese googeln, aber alle Ergebnisse sind im Zusammenhang einen Hintergrund-Thread von innerhalb einen WCF-Dienst zu rufen, nicht einen WCF-Dienst von ein Hintergrund aufrufen.
Irgendwelche Ideen?