Seeking WCF Duplex “TwoWay” Subscribe + Callback Example

WIEDER das Kopfgeld erneuern, weil ich wirklich wissen muss, wie das funktioniert, oder eine definitive Antwort, warum es nicht funktioniert.

Ich habe hier eine alternative Erklärung des Problems hinzugefügt.

Um die verdammte Zeit zu haben, einen bidirektionalen (IsOneWay = false) WCF-Client-Server in .NET 3 / 3.5 zum Laufen zu bringen.

Nachdem sich der Client erfolgreich bei dem Dienst registriert hat, ruft die regelmäßige Ankündigung () des Dienstes die registrierten Clients zurück. Es ist jetzt so, dass entweder der Client oder der Server hängen bleibt, bis das auf 2 Sekunden eingestellte SendTimeout des Servers abgelaufen ist. Dann hat die Serverseite eine Zeitüberschreitungsausnahme wie folgt. Nur dann erhält der Client-Benutzercode sofort den Methodenaufruf und versucht, einen Wert zurückzugeben. Bis dahin wird der Socket des Clients abgebrochen und das WCF-Zeug schlägt fehl.

Es scheint mir, dass etwas auf dem Client seine lokale WCF-Warteschlange von der Verarbeitung bis zum Timeout des Sockets hängt, aber nicht früh genug, um den lokalen Methodenaufruf abzubrechen. Wenn jedoch die folgende Ausnahme angenommen werden soll, versucht der Server, eine Operation an @ zu sendehttp: //schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymou (unangemessen!) und läuft aus. Möglicherweise ist dieser URI nur der "Name" des remote verbundenen Clients, da WCF weiß, dass er für die Zwecke der Fehlermeldung verwendet wird, und er scheint nur zu bedeuten, dass ein URI nicht geladen werden kann. Ich kann nicht feststellen, ob der Server zuerst ausfällt oder der Client zuerst ausfällt.

Ich habe versucht, eine WCF-Ablaufverfolgung hinzuzufügen, erhalte aber nicht viel mehr Informationen.

Ähnlicher Beispielcode ist hier, aber es muss zu viel gewesen sein, um es zu verdauen. Ich habe mit Variationen dieses Codes experimentiert.

TimeoutException 'This request operation sent to http://schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymous did not receive a reply within the configured timeout (00:00:00).  The time allotted to this operation may have been a portion of a longer timeout.  This may be because the service is still processing the operation or because the service was unable to send a reply message.  Please consider increasing the operation timeout (by casting the channel/proxy to IContextChannel and setting the OperationTimeout property) and ensure that the service is able to connect to the client.'

Server stack trace: 
   at System.ServiceModel.Dispatcher.DuplexChannelBinder.SyncDuplexRequest.WaitForReply(TimeSpan timeout)
   at System.ServiceModel.Dispatcher.DuplexChannelBinder.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Antworten auf die Frage(8)

Ihre Antwort auf die Frage