문제

오류가 어디에서 발생하는지 (Silverlight, WCF에서 다른 것 ...) 확실하지는 않지만 Silverlight에서 WCF 서비스가 호출됩니다. 이 메소드는 세터가없는 속성으로 클래스를 반환합니다. 이것은 오류가 발생합니다. 속성에 세터를 추가하면 오류가 발생하지 않습니다.

오류는 일반적인 뚫을 수없고 도움이되지 않는 실버 라이트 오류 메시지이지만 ...

[Serializable]  
[DataContract]  
public SomeClass {  
    DataMember]  
    public string PropertyA { get; set; }  
    public string PropertyB { get { return "Hi There"; } }  
}  

오류를 던져 ...

그러나 다음으로 변경하십시오.

[Serializable]  
[DataContract]  
public SomeClass {  
     [DataMember]  
     public string PropertyA { get; set; }  
     public string PropertyB { get { return "Hi There"; } set {} }  
}  

오류가 없습니다.

일반적인 isomeservice.svc & someservice.svc 클래스, 클라이언트 비동기 등을 호출하는 Silverlight에서 업데이트 된 참조 등을 포함합니다.

속성을 구성하는 올바른 방법은 무엇입니까 (Get-Only 또는 Private-Set 속성을 허용하기 위해 "Datamember"이외의 속성)가 와이어 위로 전달할 수있는 올바른 방법은 무엇입니까?

도움이 되었습니까?

해결책

예제에서 propertyb에는 datamember 속성이 표시되지 않습니다. 즉, WSDL에 노출되지 않고 시리얼 라이저에 의해 무시되지 않음을 의미합니다. 그러나 Datamember로 PropertyB를 표시하면 올바르게 직렬화하려면 세터 (개인, 제안 또는 공개)가 있어야합니다. 그렇지 않으면 예외가 발생할 수 있습니다. 와이어를 통해 읽기 전용 속성을 직렬화 할 수 있다고 생각할 수있는 두 가지 방법이 있습니다.

[DataContract]
public class SomeClass
{ 
    public SomeClass()
    {
        _propertyB = "Hi there";
    }

    [DataMember(Name="PropertyB")]
    private readonly string _propertyB;

    public string PropertyB
    {
        get { return _propertyB; }
    }
}

아니면 이거:

[DataContract]
public class SomeClass
{ 
    public SomeClass()
    {
        PorpertyB = "Hi there";
    }

    [DataMember]
    public string PropertyB
    {
        get;
        private set;
    }
}

사용하는 경우에 유의하십시오 svcutil.exe, 생성 된 프록시 클래스는 당신이 찾고있는 것이 아닐 수도있는 속성에 대한 공개 getter와 setter를 갖습니다. 이 경우 클라이언트 측에서 서비스 계약 및 데이터 계약 조립품을 사용할 수 있습니다.

다른 팁

감사. 개인 세트는 충분 해 보입니다. 필요하지 않은 경우 세트 메소드가있는 것을 좋아하지 않지만 액세스 할 경우 오류를 던질 수 있습니다.

[DataMember]  
public PropertyB {  
    get {  
         return "Hi there";  
    }  
    private set {  
         throw new Exception("Empty setter for use by WCF Service.");
    }  
}      

또는 무엇이든.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top