2012-04-13 3 views
1

Я не могу добавить System.Windows.Forms в мою библиотеку услуг WCF.Невозможно добавить ссылку `System.Windows.Forms` в мою библиотеку сервиса WCF

Я хочу вернуть List<ListViewItem> из моего метода GetItems(string path), я также пытался добавить ссылку на 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

ответ

5

WCF призвана стать сервисной платформой совместимой, поэтому я бы рекомендовал НЕ использовать .NET определенные типы данных, как ListViewItem как возвращение типы из вашего сервиса. В конце концов, что сделает клиент PHP или Ruby с таким объектом?

Вместо: использовать Item класс, возвращает список тех, кто из вашей службы WCF, и оставить его вызывающее приложение, чтобы преобразовать его в ListViewItem с необходимостью ....

также: возвращение ListViewItem из ваша служба WCF будет строго ограничить функциональность этого сервиса. Если какой-либо клиент хотел бы получить эти данные, но представить его каким-то другим способом (а не в ListView), они больше не смогут использовать этот вызов службы ..... возвращая только элементы данных (например, ваш Item) класс, вы оставите это до вызывающего абонента, чтобы решить, что делать с этими данными, и как можно показать его на экране. Я думаю, что это хорошая вещь и ее не следует менять!

+0

, поэтому вы говорите, что я использую 'List ' список созданного класса предметов! правильно ? –

+0

@MurHafSoz: yes - вернуть «Список » из вашей службы - и независимо от того, что вызывающий абонент хочет сделать с этой информацией (выполните некоторые вычисления, сохраните его, покажите на экране) и в какой форме, которую вызывающий хочет отобразить, должен быть ответственностью звонящего - услуга просто предоставляет данные - ничего больше –

+0

, которые имеют смысл, спасибо :) –

0

Вы не должны возвращать элементы управления формой или список элементов управления из службы WCF. Возвращаемыми типами могут быть типы данных Datacontract, Messagecontract, .NET и типы, которые могут быть сериализованы по проводу.

Предполагается, что услуги WCF должны предоставлять данные, а не элементы управления пользовательским интерфейсом. Это зависит от клиентского приложения для отображения этих данных в любой форме. Вы должны создать клиент Windows для отображения данных в listview.

Смежные вопросы