Der aktuelle OperationContext ist im WCF-Windows-Dienst null

Der aktuelle OperationContext ist im WCF-Windows-Dienst null

Wie in den Kommentaren erläutert, gibt es keinen OperationContext, wenn Sie direkt eine Instanz des Diensttyps erstellen – im Gegensatz zu einem WCF-Proxy/Clientchannel – und dann eine Methode darauf aufrufen. WCF stellt eine OperationContext-Instanz bereit, wenn Ihr Vorgang innerhalb eines Diensts ausgeführt wird.


Im Client-Code wurde weder ein Proxy noch eine Channel-Factory erstellt. Dienstklasseninstanz wird als Klassenbibliothek erstellt.

Sie sollten den Dienst wie im folgenden Code nutzen

 ServiceCallback serviceCallback = new ServiceCallback();
 InstanceContext instanceContext = new InstanceContext(serviceCallback);

 var pubsubProxy = new PubSubProxy.WcfPublisherContractClient(instanceContext);
 pubsubProxy.Subscribe();

Und wenn der Dienst ausgeführt wird, wird OperationContext erstellt und Sie können auf OperationContext.Current

zugreifen

Ich bin mit diesem Problem konfrontiert und keine der Lösungen hat funktioniert, und das Wichtigste ist, ob Sie

verwenden
async await 
OperationContext.Current; will be null

Meine Verwendung besteht darin, Ip so zu verwenden, dass es vor einem erwarteten Anruf verwendet wird

var clientIpAddress = System.Web.HttpContext.Current?.Request?.UserHostAddress;

Nach der ersten await-Anweisung in Ihrer asynchronen Dienstoperation könnte OperationContext.Current null sein, da der Rest des Methodenhauptteils möglicherweise in einem anderen Thread ausgeführt wird (und OperationContext nicht zwischen Threads fließt

Um es zu bekommen, können Sie Ihren Code vor jeder erwarteten Aktion schreiben

Vielleicht hilft es jemandem :)