2013-06-13 58 views
0

在客戶端應用程序中,我輸入了一個項目ID,並且WCF服務器應該返回類型爲ItemDTO的對象。但是,在回覆時,對象是空的。從WCF服務器返回的對象爲空

ItemDTO itm = Connection.Instance.HttpProxy.GetItem(ItemID); 

我目前可以確認:

  • 要求從數據庫中
  • 映射沒有工作成功邁出的項目(檢查結果映射的內容)
  • 的內容確實發送(使用提琴手檢查) enter image description here

  • 然而,當我檢查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; } 
} 
+0

對我來說,這表明在主機端發生錯誤,但現在異常或網絡故障已返回給您。您可以嘗試使用Fiddler來調試通信。有時候Fiddler會收到你的客戶不能的錯誤信息。另外,打開主機端的日誌記錄並檢查錯誤。 – Brian

回答

0

最後固定它,該解決方案是很簡單的。

只需給DTO類(在這種情況下,ItemDTO)兩端都命名空間。
例如:[DataContract][DataContract(Namespace"PoSDTO")]