Ich möchte, dass ein WCF-over-TCP-Dienst funktioniert. Ich hatte einige Probleme mit dem Ändern meines eigenen Projekts, also dachte ich, ich würde mit der "Basis" -WCF-Vorlage beginnen, die in VS2008 enthalten ist.
Hier ist die ursprüngliche WCF App.config und wenn ich den Service ausführe, kann der WCF Test Client gut damit arbeiten:
%Vor%Das funktioniert einwandfrei, überhaupt keine Probleme.
Ich dachte, es wäre trivial, es von HTTP zu TCP zu ändern: Ändere die Bindungen zu ihren TCP-Äquivalenten und entferne das httpGetEnabled serviceMetadata-Element:
%Vor%Aber wenn ich das ausführe, erhalte ich diesen Fehler im WCF Service Host:
System.InvalidOperationException: Der Vertragsname 'IMetadataExchange' konnte nicht in der Liste der Verträge gefunden werden, die vom Service Service1 implementiert wurden. Fügen Sie ServiceMetadataBehavior direkt zur Konfigurationsdatei oder zum ServiceHost hinzu, um die Unterstützung für diesen Vertrag zu aktivieren.
Ich habe das Gefühl, dass Sie keine Metadaten mit TCP senden können, aber das ist der Fall, warum gibt es eine mexTcpBinding-Option?
Nun, wenn Sie Metadaten haben möchten - TCP oder HTTP - müssen Sie immer noch das Verhalten serviceMetadata
enthalten!
Sicher, Sie können kein "HttpGetEnabled" darauf haben - aber das Verhalten selbst muss vorhanden sein, um den Austausch von Metadaten (und damit den IMetadataExchange
Vertrag) zu ermöglichen.