У меня есть следующий код:
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);
}
Когда я пытаюсь выполнить сервер после запуска вышеуказанного кода, я получаю следующую ошибку:
Введите 'ACSIS.Core.Common.Configuration.UserAcountDetials' с именем контракта данных 'UserAcountDetials: http://schemas.datacontract.org/2004/07/ACSIS.Core.Common.Configuration' не ожидается. Добавьте любые типы, которые не известны статически, в список известных типов - например, с помощью атрибута KnownTypeAttribute
или добавив их в список известных типов, переданных в DataContractSerializer.
Теперь UserSettings
описывает SystemContext
как тип IDictionary
. Я понимаю, что WCF не может волшебным образом создавать объекты из воздуха или чего-либо еще, поэтому мне нужно немного помочь.
Есть ли какой-нибудь способ, которым я могу также передать тип объекта во время выполнения и преобразовать его обратно в этот тип на другой стороне. Я не использую WCF для java to .net SOA или чего-то подобного, я знаю, что конкретный тип будет на другой стороне провода.
Если WCF действительно не поддерживает это (хотя должен быть какой-то способ), есть ли способ, которым я мог бы сериализовать данные в двоичный формат, присоединить двоичный файл к заголовку и обработать сериализацию самостоятельно, используя информацию о типе пройти через.