c# - DataContract 在 WCF 客户端服务引用中不可用

标签 c# windows wcf service datacontract

我的 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 相关的操作,这将使 DepartmentSection 可见您的客户端应用程序。

由于 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/

相关文章:

c# - 带格式化文本字段的标签/文字控件

c - 如何从合法的未知值类型中提取标准注册表值类型?

windows - 如何在 Windows 上安装 emacs?

wcf - WCF 服务库和 WCF 服务应用程序之间的区别

wcf - Azure 中托管的 WCF 的用户名和密码身份验证

wcf - 在 Windows 服务中托管 WCF 服务

c# - 每个椭圆曲线签名生成的不同签名

c# - HttpWebRequest 长 URI 解决方法?

c# - 如何检测 String.Format() 中缺少的动态参数

windows - 如何在 Windows 的变量中获取命令的结果?