Ich erstelle derzeit eine benutzerdefinierte Bindung, die HTTP-Anforderungen von einer anderen Quelle als von einem empfangenden TCP-Socket erhält. Wenn ich direkt auf einen Kanal zugreife und ihn öffne, gibt es keine Probleme. Probleme treten jedoch auf, wenn ich versuche, meine Bindung in einem Endpunkt eines WebServiceHost zu hosten.WebServiceHost ruft keinen OnAcceptChannel von benutzerdefiniertem ChannelListener auf
Ich habe Console.WriteLine() Debug-Nachrichten in jede Funktion meines benutzerdefinierten Bindungscodes eingefügt. Alles funktioniert gut, bis die OnOpen() Funktion meines ChannelListener aufgerufen wurde. Anschließend möchte das ServiceModel die OnAcceptChannel() -Methode nicht aufrufen. Keine Ausnahmen, keine Fehlermeldung; es hängt einfach dort und ruft keine andere Funktion meiner Bindung mehr auf. Ich habe die Ausgabe der Anwendung in den folgenden Code kommentiert.
WebServiceHost host = new WebServiceHost(
typeof(MyService), new Uri("http://localhost:80"));
host.AddServiceEndpoint(typeof(MyService), new MyWebHttpBinding(), "");
// BINDING CONSTRUCTOR
// BINDINGELEMENT CONSTRUCTOR
host.Open();
// BINDING: CreateBindingElements (multiple times)
// BINDINGELEMENT: Clone
// BINDINGELEMENT CONSTRUCTOR
// BINDINGELEMENT: CanBuildChannelListener
// BINDINGELEMENT: Clone
// BINDINGELEMENT CONSTRUCTOR
// BINDINGELEMENT: CanBuildChannelListener
// BINDINGELEMENT: Clone
// BINDINGELEMENT CONSTRUCTOR
// BINDINGELEMENT: Clone
// BINDINGELEMENT CONSTRUCTOR
// BINDINGELEMENT: Clone
// BINDINGELEMENT CONSTRUCTOR
// BINDINGELEMENT: BuildChannelListener
// CHANNELLISTENER CONSTRUCTOR
// BINDINGELEMENT: Clone
// BINDINGELEMENT CONSTRUCTOR
// BINDING: CreateBindingElements (multiple times)
// CHANNELLISTENER: OnOpen
// CHANNELLISTENER: OnOpen END (function completes properly. last output)
Hat jemand von euch wissen, was ich in meiner Anwendung ändern haben, dass die OnAcceptChannel Methode richtig aufgerufen wird?
Prost
Der WebServiceHost wird für REST-Style-Anfragen verwendet .... vielleicht ist das das Problem? Was passiert, wenn Sie stattdessen die reguläre ServiceHost-Klasse verwenden? –
Die Bindung [i] sollte [/ i] für REST-Stil-Anforderungen wie das ursprüngliche WebHttpBinding verwendet werden. Das Ändern des WebServiceHost zu ServiceHost behebt das Problem jedoch nicht. Die Ausgabe ist genau gleich. – Etan