2010-06-16 64 views
0

我目前正在嘗試將自定義「列名稱」添加到Web服務中的屬性。這是我的班。如何通過Web服務使用自定義屬性?

public class OrderCost 
{ 
    public int OrderNum { get; set; } 
    public int OrderLine { get; set; }  
    public int OrderRel { get; set; } 
    public DateTime OrderDate { get; set; } 
    public string PartNum { get; set; } 
    public string Description { get; set; } 
    public decimal Qty { get; set; } 
    public string SalesUM { get; set; } 
    public decimal Cost { get; set; } 
    public decimal Price { get; set; } 
    public decimal Net { get; set; } 
    public decimal Margin { get; set; } 
    public string EntryPerson { get; set; } 
    public string CustID { get; set; } 
    public string Customer { get; set; } 
} 

基本上我有另一個類(在Silverlight方面),循環所有的屬性,併爲每個屬性創建一列。事情是,我想使用除屬性名稱以外的其他名稱。例如,我想顯示「Order Number」而不是OrderNum。我試圖使用自定義屬性,但似乎沒有工作。有沒有辦法通過使用屬性在Web服務上爲這些屬性提供不同的名稱?有沒有另一種方法可以實現我想要做的事情?

回答

0

沒有,既沒有屬性,也沒有任何其他特定於.NET可以在客戶端和服務之間使用。請參閱「Basics: How Web Services Work」瞭解爲什麼不。

0

如果你在尋找什麼是控制在服務器上的這個元數據,而無需更新客戶端應用程序的方式,那麼我不認爲屬性是一個解決方案。首先,屬性是在編譯時定義的,我認爲即使您有能力這樣做,您也不應該在運行時對它們進行操作。另一個問題是,Web服務實際上沒有任何與.Net屬性相對應的本機機制,因此沒有內置的方式來傳遞這些屬性所代表的元數據。

如果你真的想通過屬性來定義這個元數據,那麼你可以把你的OrderCost類單獨的共享組件,同時爲Web服務和客戶端應用程序消耗。這裏的缺點是,如果要更改在屬性中定義的值,則客戶端應用程序在獲取更新的DLL之前不會看到這些更改。另外,如果你希望客戶端應用程序完全不知道元數據的任何改變,那麼我會考慮創建一些Display類,它包含你想要的顯示信息並作爲結果。

例如,下面的代碼示出了一個名爲MyResultObject類,其中包含一個單一的「顯示」對象和「數據」的對象的列表。顯然,命名空間,類名,以及這些類的組織是由你:

namespace MyApplication 
{ 
    public class MyResultObject 
    { 
     public Display.OrderCost Display { get; set; } 

     public IList<Data.OrderCost> Data { get; set; } 
    } 
} 

namespace MyApplication.Display 
{ 
    public class Column 
    { 
     public string HeaderText { get; set; } 
     public bool Visible { get; set; } 
    } 

    public class OrderCost 
    { 
     public Column OrderNum { get; set; } 
     public Column OrderLine { get; set; } 
     public Column OrderRel { get; set; } 
     public Column OrderDate { get; set; } 
     public Column PartNum { get; set; } 
     public Column Description { get; set; } 
     public Column Qty { get; set; } 
     public Column SalesUM { get; set; } 
     public Column Cost { get; set; } 
     public Column Price { get; set; } 
     public Column Net { get; set; } 
     public Column Margin { get; set; } 
     public Column EntryPerson { get; set; } 
     public Column CustID { get; set; } 
     public Column Customer { get; set; } 
    } 
} 

namespace MyApplication.Data 
{ 
    public class OrderCost 
    { 
     public int OrderNum { get; set; } 
     public int OrderLine { get; set; } 
     public int OrderRel { get; set; } 
     public DateTime OrderDate { get; set; } 
     public string PartNum { get; set; } 
     public string Description { get; set; } 
     public decimal Qty { get; set; } 
     public string SalesUM { get; set; } 
     public decimal Cost { get; set; } 
     public decimal Price { get; set; } 
     public decimal Net { get; set; } 
     public decimal Margin { get; set; } 
     public string EntryPerson { get; set; } 
     public string CustID { get; set; } 
     public string Customer { get; set; } 
    } 
} 

我想你應該問自己,不過,如果它是有道理的服務,以有關於它的數據如何將任何知識顯示。相反,客戶使用不理解的數據是否合理,以便它需要元數據才能正確處理數據?在某些情況下,這可能正是你想要做的,但可能不是一般情況下,我想。無論如何,這取決於您的應用程序的正確方法。

+0

像您可以與WCF不能在ASMX Web服務共享的類型。 – 2010-06-19 08:37:50

+0

我的答案應該更加明確。我想到的是由客戶端和服務器共同使用一個通用程序集,但這需要專門編寫Web服務代理以使用該程序集中的類,而不僅僅是從WSDL生成代碼。我認爲這是可能的,但除了WSDL之外,還需要客戶端和服務器之間更多的耦合,在我看來,這並不是一個理想的解決方案。 – 2010-06-21 12:27:55

相關問題