Wcf отправляет объект из Compact Framewok в Desktop WCF Service свойства не десериализовать - PullRequest
0 голосов
/ 11 мая 2011

У меня на настольном ПК работает служба wcf.Служба имеет два метода

[System.CodeDom.Compiler.GeneratedCodeAttribute ("System.ServiceModel", "3.0.0.0")]
открытый интерфейс IMainModuleService
{
OrderDTO GetOrderById (intorderId);
void ProcessOrder (OrderDTO order);
}

Я использовал Necfsvcutil, и он генерировал прокси и poco's.

Когда я использую GetOrderById (int id) из компактной среды, все работает, но когда я использую ProcessOrder (OrderDTO order), чтобы отправить заказ обратно в сервис, хотя OrderDTO имеет все свойства со значениями, когда онприбывает в метод сервиса Desktop, он не десериализует все свойства OrderDTO.OrderDTO.Id == 2050 перед отправкой, и он приходит как OrderDTO.Id == 0.Я заметил, что каждое значение свойства int равно нулю.

Спасибо!

1 Ответ

0 голосов
/ 22 мая 2011

Я наконец нашел проблему, netcfsvcutil генерирует свойство с именем PropertyName +, указанным для каждого свойства в сгенерированном dto. напр.

[System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=20)]
public System.Nullable<int> SalesPersonId
{
    get
    {
        return this.salesPersonIdField;
    }
    set
    {
        this.salesPersonIdField = value;
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool SalesPersonIdSpecified
{
    get
    {
        return this.salesPersonIdFieldSpecified;
    }
    set
    {
        this.salesPersonIdFieldSpecified = value;
    }
}

эти свойства не являются частью сущности, которая используется netcfsvcutil для генерации dto. если propertyNameSpecified не равно true, значение свойства не сериализуется, поэтому я изменил свойства и добавил строку в Setter, которая проверяет, имеет ли свойство значение, и устанавливает значение свойстваNameSpecified в true, если оно имеет ниже:

[System.Xml.Serialization.XmlElementAttribute (IsNullable = true, Order = 20)]
public System.Nullable SalesPersonId
{
получить
{
вернуть this.salesPersonIdField;
}
набор
{
this.salesPersonIdField = value;
this.SalesPersonIdSpecified = (значение! = ноль);
}
}

...