我创建了一个WCF服务,对于默认服务,我在主DataContract上添加了另一个操作契约:
[OperationContract]
void DoSomething(UserData data);
Run Code Online (Sandbox Code Playgroud)
然后我在下面有这样的东西(简化为例子的目的).问题是,即使层次结构中的所有类都使用DataContract进行修饰,并且所有成员都使用DataMember修饰,但当我使用WCF测试客户端时,它有一个红色图标,表示"WCF测试客户端不支持该操作".
[DataContract]
public class UserData {
[DataMember]
public uint One { get; set; }
[DataMember]
public CompositeType Extra { get; set; }
public UserData() { ctor. code }
}
[DataContract]
public class CompositeType {
[DataMember]
public uint Two { get; set; }
public UserData() { ctor code }
}
Run Code Online (Sandbox Code Playgroud)
好了,经历了整个事情(感谢大家的提示)解决方案是这样的:
IsReference属性in DataContract根本不需要IsOneWayDataContract即使OperationContract返回无效,也根本不需要属性.KnownType如果层次结构中的所有子类型都是我的,也就是不需要,换句话说,由我而不是.NET定义并标记DataContract或DataMember适当OperatingSystem并构建一个DataContract从OperatingSystem问题中提取必要信息的包装器.现在WCF测试客户端没有错误
将属性添加到您的“UserData”类中[KnownType(typeof(CompositeType))]
喜欢:
[DataContract]
[KnownType(typeof(CompositeType))]
public class UserData
{
[DataMember]
public uint One { get; set; }
[DataMember]
public CompositeType Extra { get; set; }
public UserData() { ctor. code }
}
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/ms730167.aspx
编辑:
http://msdn.microsoft.com/en-us/library/system.operatingsystem.aspx
OperatingSystem 类有一些与其他类相关的属性。您可以将所有这些类包含在已知类型中,但依赖关系链可能会变得相当大,我强烈建议根本不要使用操作系统类。
您应该从操作系统类中找出您实际需要的信息,并创建您自己的 DTO 以在响应中传回。这样您就可以确保您的合同中可以轻松定义所有类型。
| 归档时间: |
|
| 查看次数: |
25337 次 |
| 最近记录: |