[英]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:
[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.