1

WCF サービスにこのデータ コントラクトがあります

[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 クラスのコントラクトが利用できない理由を説明してください。

4

1 に答える 1

15

インターフェイスに、クライアント アプリケーションで作成および表示されるServiceContract関連する操作を 1 つ追加します。DepartmentDepartmentSection

Department にはセクションのリストが含まれているため、セクションも公開されます。

[ServiceContract]
public interface IService1
{
    [OperationContract]
    Room GetRoom();

    [OperationContract]
    List<Department> GetDepartments();
}

説明

Svcutil.exeを使用して確認できます。

ユーザー定義クラスの操作コントラクトが存在しない場合は、definition won't emit in proxy classSvcutil を使用して生成されます。

の 2 番目の操作コントラクトを省略するとDepartment、クラスのみRoomがプロキシ クラスで発行されます。したがって、クラスをクライアントに表示するには、クラスに少なくとも 1 つの操作コントラクトが必要です。

Room の PROXY クラス:

[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;
        }
    }
}
于 2013-08-17T10:26:41.977 に答える