3

私はEmployeeクラスを受講し、各従業員は適用された葉のリストを持っています。リストAppliedLeave[DataMember]WCFに含めることはできますか?

[DataContract]
public class Employee
{
    [DataMember]
    public string UserID { get; set; }

    [DataMember]
    public int EmployeeNumber { get; set; }

    [ForeignKey("EmployeeUserID")]
    [DataMember]
    public List<Leave> AppliedLeave
    {
        get { return _appliedLeaves; }
        set { _appliedLeaves = value; }
    }

    private List<Leave> _appliedLeaves = new List<Leave>();
    ...
 }

これを行う他の方法はありますか?

この件をご検討いただきありがとうございます

質問を拡張します

これは私の休暇クラスです:

[DataContract]
public class Leave
{

    [Key()]
    [DataMember]
    public Guid LeaveId { get; set; }

    [DataMember]
    public string LeaveType { get; set; }

    [DataMember]
    public DateTime StartDate { get; set; }

    [DataMember]
    public string EmployeeUserID { get; set; }

}

これはServiceContractを示しています---->

[ServiceContract]
public interface IEmployeeService
{
    [OperationContract]
    Employee GetEmployeeByUserId(string userId);

    [OperationContract]
    void AssignSupervisor(string userId, string supervisorUserId);

    [OperationContract]
    void DeleteEmployeeByUserId(string userId);

....
}

クライアントアプリケーションでは、

EmployeeServiceClient employeeService = new EmployeeServiceClient();

従業員employee=employeeService.GetEmployeeByUserId(id);

しかし、従業員がサービスから集まったとき、葉についてはNullが表示されます。

ここに画像の説明を入力してください

誰かが私を助けることができますか?私はここで何を間違えましたか?

4

3 に答える 3

5

はい、WCFサービス操作からジェネリックを返すことは可能です。

ただし、デフォルトでは、クライアント側の配列にキャストされます。これは、プロキシ生成中にカスタマイズできます。

WCF:シリアル化とジェネリック

また、KnownTypeAttributeを使用して、ジェネリックスを解決できるすべてのタイプでサービスを装飾する必要があります。

既知のタイプとジェネリックリゾルバ

于 2012-05-18T05:11:14.850 に答える
2

IList<T>の代わりに使用できますList<T>

于 2012-05-18T05:12:31.327 に答える
2

ソリューションの変更

また、サーバー側のリストは常にnullポインターとしてクライアントに到達することがわかりました。この問題について多くのことを閲覧した後、最初はほとんどの場合拒否されます(「コードは機能するはずです」)

問題が見つかりました。生成されたサービス参照を使用して、1つの「WCFサービス」プロジェクトと1つの「Winformsアプリ」プロジェクトを使用してソリューションを構成しました。予想どおり、Service1のインターフェイスと実装の両方がWCFサービスプロジェクトに含まれていました。しかし、リストメンバーはnullを返しました。

IService1.cs =インターフェイスのみ=を別のクラスライブラリに配置し、両側でクラスライブラリを参照し(を使用して)、サービス参照を再度生成すると、リストは機能します。クライアント側で生成されたコードははるかに単純に見えます。

このために特別な属性、サービス参照構成の変更、またはインターフェース参照は必要ありませんでした。

于 2016-07-04T09:02:12.527 に答える