У меня есть следующий код:WCF Проблема Сериализация заголовок сообщения
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);
}
Когда я пытаюсь выполнить сервер после того, как я запустить приведенный выше код, я получаю следующее сообщение об ошибке:
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.
В настоящее время UserSettings
описывает SystemContext
как тип IDictionary
. Я понимаю, что WCF не может волшебным образом создавать объекты из воздуха или что-то еще, поэтому мне нужно немного помочь.
Есть ли какой-то способ, которым я могу передать тип времени выполнения по проводу, а также преобразовать его обратно в этот тип с другой стороны. Я не использую WCF для java для. NET SOA или что-то в этом роде, я знаю, что конкретный тип будет на другой стороне провода.
Если WCF на самом деле не поддерживает это (должен быть какой-то способ), есть способ, которым я мог бы сериализовать данные в двоичном формате, присоединить двоичный файл к заголовку и обработать сериализацию самостоятельно, используя информацию о типе Я перехожу.
Почему вы используете 'MessageHeader.CreateHeader' вместо контракта с сообщением? –
Я был бы рад попробовать, как вы предложили, есть ли у вас какие-либо ссылки, на которые я мог бы обратить внимание? –