我有以下代码:
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
为 type IDictionary
。我知道 WCF 不能凭空创造物体,所以我需要一点帮助。
有什么方法可以让我也可以通过网络传递对象的运行时类型,并将其转换回另一端的那种类型。我没有将 WCF 用于 java 到 .net SOA 的东西或类似的东西,我知道具体类型将在电线的另一端。
如果 WCF 并不真正支持这一点(但必须有某种方式),有没有办法可以将数据序列化为二进制格式,将二进制文件附加到标头并自己处理序列化,使用我传递的类型信息。