문제

간단한 수업을 가지고 있습니다. "팀"이라고 가정 해 봅시다. 그리고 팀 배열을 반환하는 getteams 작업과 함께 WCF 서비스 (IIS에서 호스팅 된 BasichttpBinding, IIS에서 호스팅)를 노출시킵니다.

팀 클래스는 모양입니다

[DataContract]
public class Team
{
    [DataMember]
    public int Id { get; set; }
    [DataMember]
    public Point Position { get; set; }
    [DataMember]
    public string Code { get; set; }
    [DataMember]
    public bool Available { get; set; }
    [DataMember]
    public string Extra { get; set; }
    [DataMember]
    public double X { get; set; }
    [DataMember]
    public double Y { get; set; }
}

클라이언트 (Silverlight 3.0 앱)에서 모든 데이터를 얻지 만 위치 속성에는 기본 포인트 인스턴스가 있습니다. 포인트 구조는입니다 System.windows.media.point 직렬화 가능합니다. 또한 X 및 Y 속성을 추가하여 위치 데이터를 복제하여 와이어의 다른 쪽 끝에 올바른지 확인합니다.

XML은 가로 채기 (감사합니다, Firebug!)는 다음과 같습니다.

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
    <GetTeamsResponse xmlns="http://tempuri.org/">
        <GetTeamsResult xmlns:a="http://schemas.datacontract.org/2004/07/MyProject.Data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:Team>
                <a:Code>A23HJGF23</a:Code>
                <a:Available>true</a:Available>
                <a:Extra i:nil="true"/>
                <a:Id>1</a:Id>
                <a:Position xmlns:b="http://schemas.datacontract.org/2004/07/System.Windows">
                    <b:_x>572194.59937858</b:_x>
                    <b:_y>322518.3889979</b:_y>
                </a:Position>
                <a:X>572194.59937858</a:X>
                <a:Y>322518.3889979</a:Y>
            </a:Team>
            <!-- other <a:Team> elements -->
        </GetTeamsResult>
    </GetTeamsResponse>
</s:Body>
</s:Envelope>

따라서 사막화 문제가있는 것 같습니다. 예외는 던지지 않습니다!

왜요?

도움이 되었습니까?

해결책

간단한 설명과 마찬가지로 SL이 SL 포인트 클래스를 사용하려고하는 동안 WCF 서비스가 .NET 3 / 3.5 포인트 클래스를 반환하고 있습니까? 또는 둘 다 같은 점 구조를 언급하고 있습니까?

위치 데이터 콘텐츠의 네임 스페이스는 SL 포인트와 동일하지 않은 CLR / WPF 포인트를 사용하는 것으로 보이기 때문에 .NET 버전을 SL 버전으로 전달하고 있다고 생각합니다.

WCF 엔드 포인트는 iserializable을 사용하여 데이터 계약 시리얼 라이저 대신 XMLSerializer로 변경되므로 데이터를 볼 수 있지만 현재 XML에서 볼 수있는 사용자 정의 클래스로 표시됩니다.

편집하다:

구조물 위치에 대한 명확성을 위해

SL3 Point Struct는 System.Windows.dll에 있습니다 (http://msdn.microsoft.com/en-us/library/system.windows.woint.point(vs.95).aspx) .net 3.0 포인트 구조는 Windowsbase.dll에 있습니다 (http://msdn.microsoft.com/en-us/library/system.windows.wointe(vs.85).aspx) .net 3.5 Windowsbase.dll의 포인트 구조물 (http://msdn.microsoft.com/en-us/library/system.windows.point.aspx)

.NET을 SL과 비교할 때 같은 클래스는 아닙니다.

SL 2.0에서 발생하고 SL 웹 사이트에서보고됩니다. (http://silverlight.net/forums/t/26577.aspx)

다른 팁

클라이언트가 데이터 유형을 인식하지 못하는 것 같습니다. 가리키다.

지적한대로 System.windows.media.point는 .NET 3.0 및 Silverlight에 있습니다.

데이터 계약에서 Point를 System.Windows.media.point로 선언 할 수 있습니다. 또한 필요한 DLL이 클라이언트 프로젝트에서 참조되어 있는지 확인하십시오.

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