كيف يمكنك تكوين خاصية الحصول الوحيد لخدمة WCF تمكين سيلفرلايت

StackOverflow https://stackoverflow.com/questions/403943

سؤال

وأنا لست على يقين من حيث يؤدي الخطأ (من سيلفرلايت، من صندوق رأس المال العامل، شيء آخر ...) لكن، لدي خدمة 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 الطبقة، والمراجع التي تم تحديثها في سيلفرلايت استدعاء المتزامن العميل، الخ، الخ.

ما هي الطريقة الصحيحة لتكوين الخاصية (السمة بعض آخر غير "DataMember" للسماح لجت-فقط، أو خاصية تحديد خاصة) لتمرير ذلك عبر السلك؟

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

المحلول

في المثال الخاص بك لم يتم وضع علامة PropertyB مع السمة DataMember وهذا يعني أنه لن يتم كشفها في WSDL وتجاهلها من قبل مسلسل. ولكن إذا كنت بمناسبة PropertyB مع DataMember ثم يجب أن يكون واضع (الخاص، proptected أو الجمهور) من أجل تسلسل بشكل صحيح وإلا فإنك قد تحصل على استثناء. هناك طريقتان أستطيع أن أفكر في خصائص بعد قراءة فقط تسلسل عبر السلك:

[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 ، و ولدت فئة وكيل على حد سواء جالبة العام واضع للخاصية التي قد لا ما كنت تبحث عن أن. في هذه الحالة يمكنك استخدام عقد خدمات البيانات والمجالس عقد على جانب العميل.

نصائح أخرى

وشكرا. مجموعة الخاص يبدو أن يكون كافيا. أنا لا أحب أن أسلوب مجموعة هناك عندما لا تكون هناك حاجة إلى ذلك، ولكن يمكنني أن رمي خطأ إذا تم الوصول إليه.

[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