簡體   English   中英

(通過WCF測試客戶端)傳遞給WCF服務的部分對象為null

[英]parts of objects passed to WCF service (via WCF test client) are null

我試圖通過WCF測試客戶端將復雜對象作為參數傳遞給WCF服務,但是在服務端卻得到了null。 該對象稱為mailParameters,它包含一些字符串和名為“ eMailAddress”的自定義對象(為簡化起見,我簡化了代碼)。 這些類用[DataContract]裝飾,方法用[DataMember]裝飾,設置參數后,僅將Subject和Body字符串發送到WCF服務,而其他對象保持為空(“ eMailAddress”)。

這是界面:

[ServiceContract]
public interface ISendMailService
{
    [OperationContract]
    void DeliverEmail(mailParameters mailParams);
}


[DataContract]
public class mailParameters
{
    [DataMember]
    public string Subject { get; set; }

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

    [DataMember]
    public eMailAddress Sender { get; set; }

    [DataMember]
    public eMailAddress MailFrom { get; set; }

}

[DataContract]
public class eMailAddress
{
    private string _Address;

    [DataMember]
    public string Address
    {
        get
        {
            return _Address;
        }
        set
        {
            _Address = Address;
        }
    }

    private string _Name;

    [DataMember]
    public string Name
    {
        get
        {
            return _Name;
        }
        set
        {
            _Name = Name;
        }
    }

}

和實現(沒有實際的工作代碼,而是通過調試逐步執行,以查看是否所有的mailParams在調用后都通過了)。

public class SendMailService : ISendMailService
{
    public void DeliverEmail(mailParameters mailParams)
    {
        //throw new NotImplementedException();            
    }

}

當我檢查傳遞給DeliverEmail方法的mailParams的值時,Subject和Body是正確的,但是mailParams.MailFrom.Address和mailParams.MailFrom.Name都為null(與mailParams.Sender ...相同)

我還嘗試將eMailAddress類放入mailParameters類中,並獲得相同的結果。

我找不到關於如何將復雜對象作為參數傳遞給WCF服務的簡單示例(是的,對於WCF來說是菜鳥),只有簡單對象(可以正常工作)。 不知道如何進行。 有任何想法嗎?

原因是您將[DataMember]屬性放在錯誤的位置。 mailParameters -class中,您使用的是自動屬性,而在eMailAddress -class中,則沒有使用這些屬性

WCF要求該字段或屬性用[DataMember]屬性修飾,該屬性實際上將保存信息。 因此,在您的情況下,有兩種選擇:

  1. 使用自動屬性代替常規屬性
  2. 或者:裝飾字段而不是屬性

選項1:

[DataContract]
public class eMailAddress
{
    [DataMember]
    public string Address { get; set; }

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

選項2:

[DataContract]
public class eMailAddress
{
    [DataMember]
    private string _Address;

    public string Address
    {
        get
        {
            return _Address;
        }
        set
        {
            _Address = Address;
        }
    }

    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM