2012-04-13 96 views
1

我無法將System.Windows.Forms添加到我的WCF服務庫。無法將`System.Windows.Forms`引用添加到我的WCF服務庫

我想從我的方法GetItems(string path)返回List<ListViewItem>,我也嘗試添加System.Windows.Forms的引用,但沒有發現它看起來像WCF服務庫不支持它。

任何想法我怎麼能做到這一點?

namespace WcfServiceLibrary1 
{ 
    [ServiceContract] 
    public interface IFileManager 
    { 
     [OperationContract] 
     List<ListViewItem> collection(string path); 
    } 
} 

這是我Item.cs類:

namespace WcfServiceLibrary1 
{ 
    [DataContract] 
    public class Item 
    { 
    [DataMember] 
    public string name; 
    [DataMember] 
    public string path; 
    [DataMember] 
    public long size; 
    [DataMember] 
    public DateTime date; 
    } 
} 
+0

我認爲你需要創建一個Windows窗體應用程序,並使用WCF服務作爲客戶端。然後你可以打電話給它,並在你的表格中顯示結果。 WCF的目的不是向用戶顯示任何數據。 – Fer 2012-04-13 05:10:51

回答

5

WCF被設計成一個可互操作服務平臺,因此,我建議不要使用.NET特定的數據類型一樣ListViewItem作爲回報類型從您的服務。畢竟,PHP或Ruby客戶端會用這樣的對象做什麼?

相反:使用你的Item類,回報那些從WCF服務的列表,並把它留給調用應用程序根據需要將其轉換成ListViewItem小號....

另外:從返回ListViewItem您的WCF服務將嚴重限制該服務的功能。如果某些客戶希望獲取該數據,但以其他方式呈現(而不是ListView),則他們無法再使用該服務呼叫.....通過返回只是數據元素(如您的Item)類,則讓調用者決定如何處理這些數據,以及如何在屏幕上顯示它。我認爲這是一個好東西,不應該改變!

+0

所以你說我使用'List '我創建的物品類的列表!對 ? – 2012-04-13 05:19:31

+0

@MurHafSoz:是的 - 從您的服務中返回一個列表'並且無論調用者想要如何處理這些信息(做一些計算,存儲它,將其顯示在屏幕上)以及調用者想要顯示它的形式應該是來電者的責任 - 該服務只是提供數據 - 沒有更多 – 2012-04-13 05:21:25

+0

有道理,謝謝:) – 2012-04-13 05:21:59

0

您不應該從WCF服務返回表單控件或控件列表。返回類型可以是Datacontract,Messagecontract,.NET基本類型以及可以通過線路序列化的類型。

WCF服務應該公開數據而不是UI控件。它取決於客戶端應用程序以任何形式顯示該數據。您應該創建Windows客戶端以在列表視圖中顯示數據。

相關問題