Ich habe eine Web-API-Controller-Methode, die einen externen REST-API-Dienst mithilfe des HttpClient aufruft. Die Ergebnisse des externen REST-Aufrufs werden dann über einen Aufruf an seinen Proxy an einen WCF-Dienst übergeben.WCF-Proxy schlägt nach Aufruf externer API fehl
Wenn ich den WCF-Proxy zuerst aufrufen und dann den externen REST-Dienst aufrufen, funktioniert alles wie erwartet. Wenn ich die Reihenfolge der Aufrufe umkehren, schlägt der WCF-Proxy-Aufruf fehl, da der InnerChannel (m_inner_channel = m_channel_factory.CreateChannel()) auf dem Proxy ungültig ist.
Hier ist ein Beispiel zur Veranschaulichung ist:
//Call to external REST API Service (works)
user = await m_http_client.GetProfileAsync(id).ConfigureAwait(false);
//Call to WCF Service (works)
using (WCFServiceProxy wcf_proxy = new WCFServiceProxy())
{
config = await wcf_proxy.GetConfigAsync(user.ssid).ConfigureAwait(false);
}
Der obige Code funktioniert, aber wenn ich den Code unter dem InnerChannel des WCF-Proxy implementieren (m_inner_channel = m_channel_factory.CreateChannel()) ist null, wenn ich das machen rufen sie an den Service:
//Instantiate WCF Proxy - Creates ChannelFactory
WCFServiceProxy wcf_proxy = new WCFServiceProxy()
//Call to external REST Service (works)
user = await m_http_client.GetProfileAsync(id).ConfigureAwait(false);
//Call to WCF Service (InnerChannel is no longer instantiated)
config = await wcf_service.GetConfigAsync(user.ssid).ConfigureAwait(false);
Wenn ich die Reihenfolge der Anrufe ändern, wie unten gezeigt, funktioniert wieder:
//Instantiate WCF Service
WCFServiceProxy wcf_proxy = new WCFServiceProxy()
//Call to WCF Service (works)
config = await wcf_service.GetConfigAsync("2423432").ConfigureAwait(false);
//Call to external REST Service (works)
user = await m_http_client.GetProfileAsync(id).ConfigureAwait(false);
Kann mir jemand helfen festzustellen, was hier vor sich geht? Das Problem tritt immer noch auf, wenn ich die ConfigureAwait-Werte auf true ändere, es handelt sich also nicht um ein Kontextwechselproblem.
Es gibt mehrere Web-API-Methoden innerhalb desselben Dienstes, die den obigen WCF-Proxy ohne Probleme aufrufen. Das Problem tritt nur auf, wenn ich einen externen Dienst vor dem Aufruf des WCF-Proxyobjekts aufruft.
Jede Hilfe und/oder Erkenntnisse würden sehr geschätzt werden.
Danke, Andrew
können Sie den Stack-Trace buchen? –
Haben Sie versucht, den HttpClient nach dem Aufruf des externen Dienstes zu entfernen? –
Vielen Dank für die obigen Vorschläge, ich entsorge den HttpClient, es ist in einer "using" -Anweisung instanziiert und die Variable, die auf das instanziierte HttpClient-Objekt verweist, wird in meiner finally-Anweisung auf null gesetzt. –