【发布时间】:2010-11-21 12:22:39
【问题描述】:
我有以下代码:
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);
}
当我在运行上述代码后尝试执行服务器时,出现以下错误:
不应使用数据合同名称“UserAcountDetials:http://schemas.datacontract.org/2004/07/ACSIS.Core.Common.Configuration”键入“ACSIS.Core.Common.Configuration.UserAcountDetials”。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用
KnownTypeAttribute属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。
现在UserSettings 将SystemContext 描述为IDictionary 类型。我知道 WCF 不能凭空创造物体,所以我需要一点帮助。
有没有什么方法可以通过网络传递对象的运行时类型,并将其转换回另一端的那种类型。我没有将 WCF 用于 java 到 .net SOA 的东西或类似的东西,我知道具体类型将在电线的另一端。
如果 WCF 并不真正支持这一点(但必须有某种方式),有没有办法可以将数据序列化为二进制格式,将二进制文件附加到标头并自己处理序列化,使用类型信息我穿过去。
【问题讨论】:
-
你为什么使用
MessageHeader.CreateHeader而不是消息合约? -
我很乐意按照您的建议进行尝试,您有什么可以参考的参考资料吗?
标签: .net wcf serialization datacontract