Ich habe eine benutzerdefinierte Intranetanwendung, die keine Interoperabilitätsanforderungen hat. Wir konstruieren programmatisch einen NetTcp-Kanal im Duplex-Modus zum Weiterleiten von Nachrichten. Wir wollten die Nachrichtencodierung ändern, konnten aber nicht herausfinden, wie dies geschehen kann.
Der Ansatz, den wir (erfolglos) gemacht haben, bestand darin, das NetTcpBinding wie folgt in eine neue Klasse namens LeanTcpBinding zu erweitern:
%Vor%Offensichtlich versuchen wir das standardmäßige BinaryMessageEncodingBindingElement durch unser eigenes zu ersetzen. Nur um die Verwendung zu starten, ist das LeanBinaryMessageEncodingBindingElement eine Erweiterung des BinaryMessageEncodingBindingElement wie folgt:
%Vor%Wenn ich versuche, die Bindung zu verwenden, tut es genau das, was ich denke, es sollte tun ... es ersetzt das BinaryMessageEncodingBindingElement. Ich bekomme jedoch nie Aufrufe an die LeanBinaryMessageEncodingBindingElement.CreateMessageEncoderFactory (), obwohl Nachrichten über den Kanal ausgetauscht werden.
Hat jemand Vorschläge, wie man das richtig macht?
Kenny Wolf hat klargestellt, was fehlte und es ist im Blog-Eintrag dokumentiert.
Für die Ungeduldigen besteht das Problem darin, dass das MessageEncoderBindingElement standardmäßig nicht zu den Bindeparametern des Kontexts hinzugefügt wird. Wenn der Transport dann später das MessageEncoderBindingElement findet, kann es dasjenige nicht finden, das ich (oder Sie) erstellt habe, und hat den stillen Fehler, den ich in meinem ursprünglichen Post bemerkt habe.
Leider müssen Sie alle Methoden von CanBuildXXX und BuildXXX wie folgt überschreiben, um sicherzustellen, dass Sie den Bindungsparametern des Kontexts das Bindungselement hinzufügen.
%Vor%