当我调用我的 WCF Soap 服务的方法时,会引发错误,并且 svlog 文件中会出现错误:
不应使用数据合同名称“消息:http: //schemas.datacontract.org/2004/07/xxx.ActiveDirectoryService.classes.WCF ”键入“xxx.ActiveDirectoryService.classes.WCF.Message” 。考虑使用 DataContractResolver 或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。
我尝试在这里和那里使用 KnownType 但没有成功(我必须承认我不太确定我的使用 100% 正确)。
这是我的接口/类:
[ServiceContract]
public interface IActiveDirectory
{
[OperationContract]
[WebGet]
void Dummy();
[OperationContract]
[WebGet]
AbstractMessage Dummy2();
[OperationContract]
[WebGet]
AbstractMessage Dummy3();
[OperationContract]
[WebGet]
AbstractMessage SetPassWord(string customer, string customerPassword, string userLogin, string userPassword);
}
[DataContract]
public abstract class AbstractMessage
{
[DataMember]
public virtual bool IsError { get; set; }
[DataMember]
public virtual string ErrorMessage { get; set; }
[DataMember]
public virtual string ReturnValue { get; set; }
}
public class Message : AbstractMessage
{
<...>
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
[KnownType(typeof(AbstractMessage))]
public class ActiveDirectory : IActiveDirectory
{
public void Dummy()
{
}
public AbstractMessage Dummy2()
{
return new AbstractMessage();
}
public AbstractMessage Dummy3()
{
return new Message();
}
public AbstractMessage SetPassWord(string customer, string customerPassword, string userLogin, string userPassword)
{
<...>
return message; // message is of type Message
}
}
编辑: 12AM35 GMT+1
我添加了 Dummy() 方法。
- 从客户端调用 Dummy 工作正常。
- 从客户端调用 Dummy2 工作正常。
- 从客户端调用 Dummy3 会导致相同的错误。
编辑 12AM39 GMT+1
进行以下更改没有帮助。
[DataContract]
[KnownType(typeof(AbstractMessage))]
public class Message : AbstractMessage
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
[KnownType(typeof(AbstractMessage))]
[KnownType(typeof(Message))]
public class ActiveDirectory : IActiveDirectory
编辑: 13AM31 GMT+1
如果我将 Dummy3 返回类型设置为 Message,则在客户端代码中调用 Dummy3 即可。
WCF + 多态性有些奇怪......