我的 WCF 服务中有这个数据契约(Contract)
[DataContract]
public class Department
{
[DataMember]
public List<Section> Sections { get; set; }
}
[DataContract]
public class Section
{
[DataMember]
public List<Room> Rooms { get; set; }
}
[DataContract]
public class Room
{
[DataMember]
public uint RoomId { get; set; }
}
当我在客户端应用程序中引用我的服务时,我只看到 Room 类,任何人都可以解释我为什么 Department 和 Section 类的契约(Contract)在客户端不可用。
最佳答案
在你的 ServiceContract
接口(interface)中添加一个与 Department
相关的操作,这将使 Department
和 Section
可见您的客户端应用程序。
由于 Department 包含 Sections 列表,它也会公开 Section。
[ServiceContract]
public interface IService1
{
[OperationContract]
Room GetRoom();
[OperationContract]
List<Department> GetDepartments();
}
解释
您可以使用 Svcutil.exe 来验证它.
如果用户定义的类不存在操作契约,则其定义不会在使用 Svcutil 生成的代理类中发出
。
如果我省略 Department
的第二个操作契约,代理类中只会发出 Room
类。因此,您需要在您的类上至少有一个操作契约(Contract),以使其对您的客户可见。
房间的代理类:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization",
"4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="Room",
Namespace="http://schemas.datacontract.org/2004/07/DummyService")]
public partial class Room : object,
System.Runtime.Serialization.IExtensibleDataObject
{
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
private uint RoomIdField;
public System.Runtime.Serialization.ExtensionDataObject ExtensionData
{
get
{
return this.extensionDataField;
}
set
{
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public uint RoomId
{
get
{
return this.RoomIdField;
}
set
{
this.RoomIdField = value;
}
}
}
关于c# - DataContract 在 WCF 客户端服务引用中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18286785/