Ich habe den folgenden Code:WCF Problem Serialisierung eine Message Header
public virtual void Initialise()
{
this.AddHeader("SystemContext", this.UserSettings.SystemContext);
}
public virtual void AddHeader(string key, object value)
{
var customHeader = MessageHeader.CreateHeader(key, this.SystemSettings.SystemServiceNamespace, value);
OperationContext.Current.OutgoingMessageHeaders.Add(customHeader);
}
Wenn ich versuche, und führen Sie den Server, nachdem ich den obigen Code ausgeführt haben, bekomme ich folgende Fehlermeldung:
Type 'ACSIS.Core.Common.Configuration.UserAcountDetials' with data contract name 'UserAcountDetials: http://schemas.datacontract.org/2004/07/ACSIS.Core.Common.Configuration ' is not expected. Add any types not known statically to the list of known types - for example, by using the
KnownTypeAttribute
attribute or by adding them to the list of known types passed to DataContractSerializer.
Nun beschreibt UserSettings
SystemContext
als vom Typ IDictionary
. Ich verstehe, dass WCF keine magischen Objekte aus der Luft schaffen kann oder so, also muss ich etwas helfen.
Gibt es eine Möglichkeit, dass ich den Laufzeittyp des Objekts auch über die Leitung übergeben und auf der anderen Seite in diesen Typ konvertieren kann. Ich benutze WCF nicht für Java zu .net SOA Zeug oder etwas ähnliches, ich weiß, dass der konkrete Typ auf der anderen Seite der Leitung sein wird.
Wenn WCF dies nicht wirklich unterstützt (es muss doch einen Weg geben), gibt es eine Möglichkeit, die Daten in ein Binärformat zu serialisieren, die Binärdatei an die Kopfzeile anzuhängen und die Serialisierung mithilfe der Typinformationen selbst zu handhaben Ich gehe rüber.
Warum verwenden Sie 'MessageHeader.CreateHeader' anstelle eines Nachrichtenvertrags? –
Ich würde gerne versuchen, wie Sie vorgeschlagen haben, haben Sie irgendwelche Referenzen, die ich betrachten könnte? –