2011-05-11 2 views
0

wcf 서비스가 데스크톱 PC에서 실행되고 있습니다. 서비스는 두 가지 방법을 갖는다Wcf가 Compact Framewok에서 Desktop으로 개체 보내기 WCF 서비스 속성이 역 직렬화되지 않음

[System.CodeDom.Compiler.GeneratedCodeAttribute ("는 system.serviceModel", "3.0.0.0")]
공용 인터페이스 IMainModuleService
{
OrderDTO GetOrderById (ORDERID INT);
void ProcessOrder (OrderDTO order);

Necfsvcutil을 사용하여 프록시와 poco를 생성했습니다.

컴팩트 프레임 워크에서 GetOrderById (int id)를 사용할 때 모든 기능이 작동하지만 OrderDTO에 값이있는 모든 속성이 있지만 ProcessOrder (OrderDTO 순서)를 사용하여 서비스에 다시 명령을 보내면 도착합니다. 데스크톱 서비스 메서드에서 OrderDTO의 모든 속성을 deserialize하지 않습니다. OrderDTO.Id == 2050을 보내기 전에 OrderDTO.Id == 0으로 도착합니다. 모든 int 속성 값이 0과 같습니다.

감사합니다.

답변

0

마지막으로 문제가 발견되어 netcfsvcutil은 Name 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가 아닌 경우 속성 값이 serialize되지 않으므로 속성을 변경하고 Setter에서 속성을 값이 있는지 검사하고 propertyNameSpecified의 값을 true로 설정합니다. 다음과 같은 :

[System.Xml.Serialization.XmlElementAttribute (ISNULLABLE = 사실, 주문 = 20)]
공공 선택 System.Nullable SalesPersonId
{

{
수익을 this.salesPersonIdField 얻을;
}

{
this.salesPersonIdField = 값을 설정;
this.SalesPersonIdSpecified = (값! = null);
}
}

관련 문제