2011-01-11 6 views
3

List (클라이언트로 보내기) 메서드 (GetUserSoftware)를 사용하여 WCF 서비스를 얻었습니다.WCF 클라이언트 측 List <>

[DataContract] 
public class Software 
{ 
    public string SoftwareID { get; set; } 
    public string SoftwareName { get; set; } 
    public string DownloadPath { get; set; } 
    public int PackageID { get; set; } 

} 

방법은 example.com의 clien 모든 소프트웨어 availeble를 얻기 위해 내 DB를 겪고, 다시 클라이언트로 전송하는 그 목록을 생성합니다 :

소프트웨어가 I는 다음과 같이 정의했습니다.

문제는 클라이언트 측에서 목록이 배열로 바뀌 었습니다. 해당 배열의 모든 항목에는 내 소프트웨어 속성이 들어 있지 않습니다.

나는 서버 측을 통해 자신의 길을 디버깅했습니다. 보내려는 목록이 정확하다는 것을 알았습니다. 예상되는 소프트웨어와 속성이 포함되어 있습니다.

어느 누구도이 문제를 해결하거나 내가 뭘 할 수 있는지 알고 있습니까?

답변

4

속성에 [DataMemeber] 속성을 잊어 버렸습니까?

4

유형에 DataContract 속성을 사용하면 일련 번호를 지정하고 서비스와 클라이언트간에 전송하려는 각 속성이나 필드에 DataMember 속성을 사용해야합니다. 컬렉션은 기본적으로 배열로 만들어집니다. 이 기능이 마음에 들지 않으면 사용할 서비스 유형을 선택할 수있는 서비스 참조 추가 창 -> 고급 설정에서이 동작을 변경할 수 있습니다.

+0

+1, 내 작은 문제를 해결합니다! – elbaid

+0

+1, 내 문제도 해결했습니다. 이 문제에 대한 메모 (문제가 있었기 때문에). Visual Studio 2010에서 이미 서비스 참조를 만들고 다시 만들고 싶지 않은 경우 서비스 참조를 마우스 오른쪽 단추로 클릭하고 "서비스 참조 구성"을 클릭하여 가져올 수 있습니다. – Jordan

1

첫째, 당신이 직렬화하려는 각 속성은 [DataMember를] 속성이 있어야합니다

[DataContract] 
public class Software 
{ 
    [DataMember] 
    public string SoftwareID { get; set; } 
    [DataMember] 
    public string SoftwareName { get; set; } 
    [DataMember] 
    public string DownloadPath { get; set; } 
    [DataMember] 
    public int PackageID { get; set; }  
} 

둘째는, 배열로 변환은 클라이언트가 아닌 서버에서 처리 될 것이다.

0

서비스 참조를 추가 할 때 클러스터에 배열 대신 목록을 표시 할 수 있습니다. "고급"단추를 클릭하고 원하는 형식으로 컬렉션 유형을 변경하십시오.

0

나는 똑같은 문제로 고통 받고 있었고 이제 해결했습니다! 그것은 ServiceKnownType 문제였습니다. 알려진 유형의 로더가있는 경우 런타임 유형을 다음과 같이 추가해야합니다.

Type aaa = Type.GetType("System.Collections.Generic.List`1[[ProjectName.BusinessObjects.Bank, ProjectName.BusinessObjects, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null]]"); 

knownTypes.Add(aaa); 

같은 문제가있는 사람은 누구나 시도 할 수 있습니다. 그것은 내 환경에서 일하고 있어요!