Ошибка при запуске библиотеки служб WCF - PullRequest
0 голосов
/ 05 августа 2011

Я создал сервисную библиотеку WCF, я добавил ссылку на несколько сторонних DLL. Это мой интерфейс

[ServiceContract]
public interface IService1
{
    [OperationContract]
    3rdpartyreturntype GetObj(System.Windows.Controls.Control txtcontrol);
}

// Use a data contract as illustrated in the sample below to add composite types to service operations
[DataContract]
public class nclass
{
    [DataMember]
    public System.Windows.Controls.Control txtcontrol
    {
        get { return txtcontrol; }
        set { txtcontrol = value; }
    }

    [DataMember]
    public 3rdpartyreturntype nobj
    {
        get { return vuiobj; }
        set { vuiobj = value; }
    }

    [DataMember]
    public System.Windows.Input.TouchDevice tchdev
    {
        get { return tchdev; }
        set { tchdev = value; }
    }
}

и я реализовал вышеуказанный интерфейс. Когда я запускаю сервис, я получаю сообщение об ошибке ниже, кто-нибудь может мне помочь?

тип 'System.Windows.Input.TouchDevice' не может быть сериализован. Рассматривать пометить его атрибутом DataContractAttribute и пометить все его членов, которые вы хотите сериализовать с DataMemberAttribute атрибут.

Ответы [ 2 ]

0 голосов
/ 05 августа 2011

Может показаться, что тип "System.Windows.Input.TouchDevice" сам по себе не помечен как сериализуемый или как DataContract.

Вместо того, чтобы пытаться передать TouchDevice и элемент управления напрямую, возможно, выможете просто передать свойства, которые вам небезразличны.Я предполагаю, что в случае TextControl вы просто заботитесь о значении Text.А для TouchDevice, может быть, имя источника и целевого элемента управления?

0 голосов
/ 05 августа 2011

Если вы хотите, чтобы сложный тип, такой как класс, был сериализован, вы должны объявить каждый из его членов как член данных, а класс - как объект данных.

В этом случае сенсорное устройство - это сложный тип (класс), поэтомувам нужно пометить все его члены как datamembers, а класс - как datacontract.

, но, как я вижу по типу, он принадлежит system.windows.input, поэтому класс не может быть сериализован.следовательно, вы не можете использовать это как элемент данных.

Если вы используете только набор элементов, принадлежащих к классу touchDevice, вы можете создать свой собственный класс, который будет отображать только набор элементов touchdevice, которые можно сериализовать.и украсить этот новый класс атрибутами datacontract и datamember.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...