سؤال

لدي فئة بسيطة، دعنا نقول "فريق" وفضح خدمة WCF (basichttpbinding، المستضاف في IIS) مع عملية Getteam التي ترجع مجموعة من الفريق.

فئة الفريق تبدو وكأنها

[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>

لذلك يبدو أن هناك مشكلة في التحيز. لا يتم طرح أي استثناء!

لماذا ا؟

هل كانت مفيدة؟

المحلول

تماما مثل توضيح سريع، هي خدمة WCF الخاصة بك إرجاع فئة .NET 3/35 نقطة بينما تحاول SL استخدام فئة نقطة SL؟ أو هل يشير كلاهما إلى نفس هيكل النقطة.

أفكر في أنك تمر بإصدار .NET إلى إصدار SL لأن مساحة الاسم في موضع DataContract يبدو أن تشير إلى نقطة CLR / WPF نقطة، والتي ليست هي نفس نقطة SL.

ستستخدم نقطة النهاية WCF iserializable للتغيير إلى xmlserializer بدلا من تسلسل عاق البيانات، لذلك سترى البيانات، ولكن كصف مخصص مع _x و _y الذي تراه في XML في الوقت الحاضر.

تعديل:

للوضوح على موقع الهيكل

SL3 نقطة بنية في system.windows.dll (http://msdn.microsoft.com/en-us/library/system.windows.point(vs.95).aspx.) .NET 3.0 نقطة بنية في windowsbase.dll (http://msdn.microsoft.com/en-us/library/system.windows.point(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.

يمكنك محاولة إعلان نقطة باسم System.windows.media.point في عقد البيانات الخاص بك. تأكد أيضا من الإشارة إلى DLL الضروري في مشروع العميل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top