Wie konfigurieren Sie WCF-Typen programmgesteuert?

Meine client - /server-Anwendung mit WCF für die Kommunikation, die war großartig. Jedoch ein Manko der aktuellen Architektur ist, dass ich verwenden muss, bekannt geben Sie die Konfiguration für bestimmte Arten übertragen. Ich bin mit einem in-house Pub/Sub-Mechanismus, und diese Anforderung ist unumgänglich.

Das problem ist, dass es leicht zu vergessen, hinzuzufügen, die bekannt geben, und wenn Sie das tun, WCF schlägt im hintergrund fehl, mit einige Hinweise darauf, was falsch läuft.

In meiner Anwendung, ich kenne den Typen, die gesendet werden. Ich möchte, um die Konfiguration programmatisch, eher als deklarativ über die App.config - Datei, die enthält derzeit so etwas wie dieses:

<system.runtime.serialization>
  <dataContractSerializer>
    <declaredTypes>
      <add type="MyProject.MyParent, MyProjectAssembly">
        <knownType type="MyProject.MyChild1, MyProjectAssembly"/>
        <knownType type="MyProject.MyChild2, MyProjectAssembly"/>
        <knownType type="MyProject.MyChild3, MyProjectAssembly"/>
        <knownType type="MyProject.MyChild4, MyProjectAssembly"/>
        <knownType type="MyProject.MyChild5, MyProjectAssembly"/>
      </add>
    </declaredTypes>
  </dataContractSerializer>
</system.runtime.serialization>

Stattdessen würde ich gerne etwas wie das hier tun:

foreach (Type type in _transmittedTypes)
{
    //How would I write this method?
    AddKnownType(typeof(MyParent), type);
}

Kann mir bitte jemand erklären, wie ich das tun kann?

BEARBEITEN Bitte haben Sie Verständnis, dass ich versuche mit den bekannten Typen dynamisch zur Laufzeit und nicht als deklarativ in der Konfiguration oder die Verwendung von Attributen im Quellcode.

Dies ist im Grunde eine Frage, über die WCF-API, nicht auf eine Stil-Frage.

EDIT 2 Dieser MSDN-Seite Seite besagt:

Können Sie auch Arten, die ReadOnlyCollection, aufgerufen durch die KnownTypes Eigenschaft des DataContractSerializer.

Leider das ist alles was es sagt, und es macht nicht furchtbar viel Sinn gegeben, dass KnownTypes ist eine readonly-Eigenschaft und der Wert der Eigenschaft ist ein ReadOnlyCollection.

InformationsquelleAutor der Frage Drew Noakes | 2009-04-21

Schreibe einen Kommentar