0
在客戶端應用程序中,我輸入了一個項目ID,並且WCF服務器應該返回類型爲ItemDTO
的對象。但是,在回覆時,對象是空的。從WCF服務器返回的對象爲空
ItemDTO itm = Connection.Instance.HttpProxy.GetItem(ItemID);
我目前可以確認:
- 要求從數據庫中
- 映射沒有工作成功邁出的項目(檢查結果映射的內容)
的內容確實發送(使用提琴手檢查)
然而,當我檢查
itm
的內容時,它是空的。
這是GetItem()
方法的WCF服務器中:
public ItemDTO GetItem(string itemID) {
using (var db = new PoSEntities()) {
var query = from i in db.Items
where i.ItemID.Equals(itemID)
select i;
Item item = query.FirstOrDefault();
return item == null ? null : Mapping.Map<Item, ItemDTO>(item);
}
}
我使用AutoMapper映射實體對象到DTO:
public static H Map<T, H>(T i) {
Mapper.CreateMap<T, H>();
return Mapper.Map<T, H>(i);
}
的Item
類是由實體產生框架:
public partial class Item
{
public Item()
{
this.Sal1 = new HashSet<Sal1>();
}
public string ItemID { get; set; }
public string Name { get; set; }
public string Manufacturer { get; set; }
public int StockQuantity { get; set; }
public decimal Price { get; set; }
public virtual ICollection<Sal1> Sal1 { get; set; }
}
Connection類:
public sealed class Connection {
private readonly string _address = "http://Edwin:8080/PoS";
private static Connection _instance;
private static object _padLock = new Object();
private static ChannelFactory<IPoS> httpFactory;
private static IPoS _httpProxy; //Singleton
public IPoS HttpProxy { get { return _httpProxy; } }
public static Connection Instance {
get {
if (_instance == null) {
lock (_padLock) {
if (_instance == null) {
_instance = new Connection();
}
}
}
return _instance;
}
}
private Connection() {
httpFactory = new ChannelFactory<IPoS>(
new BasicHttpBinding(),
new EndpointAddress(_address));
_httpProxy = httpFactory.CreateChannel();
}
}
ItemDTO
類別:
[DataContract]
public class ItemDTO {
[DataMember]
public string ItemID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Manufacturer { get; set; }
[DataMember]
public int StockQuantity { get; set; }
[DataMember]
public decimal Price { get; set; }
}
對我來說,這表明在主機端發生錯誤,但現在異常或網絡故障已返回給您。您可以嘗試使用Fiddler來調試通信。有時候Fiddler會收到你的客戶不能的錯誤信息。另外,打開主機端的日誌記錄並檢查錯誤。 – Brian