2012-05-06 7 views
8

के माध्यम से इसे डब्ल्यूसीएफ रेस्ट सेवा बनाते समय, मैंने देखा है कि मेरी वेब सेवा में सभी पैरामीटर इसे मेरे कार्यान्वयन में नहीं बना रहे हैं।डब्ल्यूसीएफ डेटा अनुबंध में सभी पैरामीटर वेब सेवा कॉल

[ServiceContract(Namespace="http://example.com/recordservice")] 
public interface IBosleySchedulingServiceImpl 
{ 
    [OperationContract] 
    [WebInvoke(UriTemplate = "Record/Create", 
     RequestFormat = WebMessageFormat.Xml, 
     ResponseFormat = WebMessageFormat.Xml, 
     BodyStyle = WebMessageBodyStyle.Bare, Method = "POST")] 
    string CreateRecord(Record record); 
} 

[DataContract(Namespace="http://example.com/recordservice")] 
public class Appointment 
{ 
    [DataMember] 
    public int ResponseType { get; set; } 

    [DataMember] 
    public int ServiceType { get; set; } 

    [DataMember] 
    public string ContactId { get; set; } 

    [DataMember] 
    public string Location { get; set; } 

    [DataMember] 
    public string Time { get; set; }   
} 

मैं इस एक्सएमएल गुजर रही है::

<Appointment xmlns="http://ngs.bosley.com/BosleySchedulingService"> 
    <ContactId>1123-123</ContactId> 
    <Location>Fresno</Location> 
    <Time>2012-05-05T08:30:00</Time> 
    <ResponseType>45</ResponseType> 
    <ServiceType>45</ServiceType> 
</Appointment> 

मेरी सेवा में, मैं सिर्फ एक लॉग में मूल्यों outputting हूँ तो मैं मान सत्यापित कर सकते हैं

यहां इंटरफ़ेस है समय के लिए आ रहे हैं:

logger.Debug("ContactId: " + appointment.ContactId); 
logger.Debug("Time Field: " + appointment.Time); 
logger.Debug("Location: " + appointment.Location); 
logger.Debug("Response Type: " + Convert.ToInt32(appointment.ResponseType)); 
logger.Debug("ServiceType: " + Convert.ToInt32(appointment.ServiceType)); 

हालांकि, मेरे आउटपुट में, पूर्णांक मान ज़ी के रूप में आ रहे हैं roes:

ContactId: 1123-123 
Time Field: 2012-05-05T08:30:00 
Location: Fresno 
Response Type: 0 
ServiceType: 0 

जब मैं DataContract और सेवा कार्यान्वयन से तार हटाने के लिए, पूर्णांक मूल्यों के माध्यम से एक समस्या के बिना आते हैं।

Response Type: 45 
ServiceType: 45 

मैं इस से पूरी तरह उलझन में हूं और किसी भी मदद की सराहना की जाएगी।

+0

कोई विशिष्ट कारण है कि आप अपने पूर्णांक को Int32 में स्पष्ट रूप से क्यों परिवर्तित कर रहे हैं? – Satyajit

+0

चलिए पूर्णांक में रूपांतरण को भूलकर शुरू करते हैं, और केवल 'प्रतिक्रिया प्रकार' और 'ServiceType' को लॉगर में नंगे स्ट्रिंग के रूप में आउटपुट करते हैं। –

+0

कनवर्टो यह निर्धारित करने का एक प्रयास था कि सेवा कार्यान्वयन के हिस्से में गलत कलाकारों के कारण मेरे मूल्य गुम हो गए थे या नहीं। अब जब मैं वास्तव में नीचे दिए गए उत्तर का उपयोग करके मूल्य प्राप्त कर सकता हूं, तो मैं उन्हें सामान्य रूप से ToString विधि का उपयोग करने दूंगा। हालांकि धन्यवाद। –

उत्तर

12

डिफ़ॉल्ट रूप से जब आप wcf के माध्यम से ऑब्जेक्ट भेजते हैं तो गुण वर्णमाला क्रम में भेजे जाएंगे जबतक कि आप ऑर्डर निर्दिष्ट न करें।

आप गुणों का क्रम निर्दिष्ट कर सकते हैं या ऑर्डरिंग बदल सकते हैं ताकि वे वर्णानुक्रम में दिखाई दें।

[DataContract(Namespace="http://example.com/recordservice")] 
public class Appointment 
{ 
    [DataMember(Order = 1)] 
    public int ResponseType { get; set; } 

    [DataMember(Order = 2)] 
    public int ServiceType { get; set; } 

    [DataMember(Order = 3)] 
    public string ContactId { get; set; } 

    [DataMember(Order = 4)] 
    public string Location { get; set; } 

    [DataMember(Order = 5)] 
    public string Time { get; set; }   
} 
+0

यह प्रासंगिक कैसे है? –

+0

यदि गुण सही क्रम में नहीं भेजे जाते हैं तो वे सेवा – SCB

+1

पर भेजे जाने पर पॉप्युलेट नहीं पाएंगे, क्या यह गलत स्लॉट में आबादी वाले गुणों में दिखाई देगा? या क्या यह सिर्फ उन लोगों को पॉप्युलेट करेगा? एक वेब सेवा के लिए एक अजीब आवश्यकता की तरह लगता है। –

संबंधित मुद्दे