我在台式机上运行wcf服务。该服务有两种方法
[System.CodeDom.Compiler.GeneratedCodeAttribute(“System.ServiceModel”,“3.0.0.0”)]
公共接口IMainModuleService
{
OrderDTO GetOrderById(int orderId);
void ProcessOrder(OrderDTO order);
}
我使用了Necfsvcutil,它生成了一个代理和poco。
当我从紧凑框架中使用GetOrderById(int id)时,一切正常,但何时 我使用ProcessOrder(OrderDTO订单)将订单发回服务,尽管OrderDTO具有带值的所有属性,当它到达桌面服务方法时,它不会反序列化OrderDTO的所有属性。在发送之前OrderDTO.Id == 2050并且它作为OrderDTO.Id == 0到达。我注意到每个int属性值都等于零。
谢谢!
答案 0 :(得分:0)
我终于找到了问题,netcfsvcutil为生成的dto中的每个属性生成一个名为PropertyName + Specified的属性。离。
[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中添加了一行,用于检查属性是否有值,并将propertyNameSpecified的值设置为true(如果有),如下面:
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true,Order = 20)]
public System.Nullable SalesPersonId
{
得到
{
return this.salesPersonIdField;
}
设置
{
this.salesPersonIdField = value;
this.SalesPersonIdSpecified =(value!= null);
}
}