2010-05-21 8 views
5

कोई आउट या रेफ पैरामीटर नहीं है मेरे पास एक डब्ल्यूसीएफ सेवा और वेब क्लाइंट है। वेब सेवा एक विधि SubmitOrders लागू करता है। यह विधि ऑर्डर का संग्रह लेती है। समस्या यह है कि सेवा को प्रत्येक ऑर्डर के लिए परिणामों के के एक सरणी को वापस करना होगा - सत्य या गलत। डब्ल्यूसीएफ पैरामीटर को आउट या रेफरी के रूप में चिह्नित करने से समझ नहीं आता है। आप क्या सुझाव देंगे?डिजाइनिंग डब्ल्यूसीएफ इंटरफ़ेस:

[ServiceContact] 
public bool SubmitOrders(OrdersInfo) 

[DataContract] 
public class OrdersInfo 
{ 
    Order[] Orders; 
} 
+0

ठीक है।डब्ल्यूसीएफ विशेषताओं पर यह सिर्फ ज्ञान की कमी थी। उत्तर के लिए सभी को धन्यवाद। –

उत्तर

11

डब्ल्यूसीएफ पैरामीटर को चिह्नित या रेफरी के रूप में चिह्नित करना कोई समझ नहीं आता है।

आउट पैरामीटर डब्ल्यूसीएफ में समझ में आता है।

आप क्या सलाह देंगे?

मैं पैरामीटर का उपयोग करने की सलाह देता हूं।


नोट 1: यह आपके आउट पैरामीटर को आपके पहले पैरामीटर के रूप में ले जाएगा।

नोट 2: हाँ आप डब्ल्यूसीएफ में जटिल प्रकारों के साथ वस्तुओं को वापस कर सकते हैं। [डेटाकंट्रैक्ट] की विशेषता के साथ अपनी कक्षा को टैग करें और [PropertiesMember] की विशेषता के साथ अपनी गुणों को टैग करें।

+0

मैं सहमत हूं, हमने उन्हें अपनी सेवाओं में व्यापक रूप से उपयोग किया है। आप इस विधि को IsOneWay = False के रूप में भी चिह्नित कर सकते हैं और केवल एक बूल के बजाय कॉलर को जो भी डेटा चाहते हैं उसे वापस ले सकते हैं। –

+0

एर .. मुझे लगता है। मैंने सोचा कि डब्ल्यूसीएफ वर्ग को संदेश में क्रमबद्ध करता है और संदेश सेवा में स्थानांतरित हो जाता है। आउट पैरामीटर कुछ क्लाइंट को बैक संदेश मानते हैं - क्या मैं सही हूँ? –

+0

बस OneWayAttribute जोड़ें नहीं! डिफ़ॉल्ट अनुरोध/प्रतिक्रिया है। – Erup

1

विशेष वर्ग जिसमें ऑर्डर और सत्य/झूठा, या tupels की एक सरणी है।

2

ठीक है, अगर आप पैरामीटर से बचने और रेफरी करना चाहते हैं, तो आप हमेशा सफलतापूर्वक सबमिट किए गए आदेशों की आईडी की एक सरणी वापस कर सकते हैं।

+1

@ कैप्टन: मैं विशेष रूप से डब्ल्यूसीएफ के बारे में निश्चित नहीं हूं, लेकिन एसओएपी सेवाएं "आउट" पैरामीटर का उपयोग कर सकती हैं। मुझे लगता है कि डब्ल्यूसीएफ का समर्थन करता है क्योंकि कम से कम एसओएपी और टीसीपी/आईपी के साथ यह समझ में आता है। –

1

विधि दिखाई देगा:

public OrdersInfo SubmitOrders(OrderInfo orders){ 
} 

जहां OrderInfo में प्रत्येक आइटम की तरह एक SubmissionStatusInfo होगा:

class SubmissionStatusInfo{ 
enum Status { get; set; } 
string Message { get; set; } 
} 

जहां Status : Submitted, Failed, Error आदि
Message: एक स्ट्रिंग में कुछ अतिरिक्त जानकारी दे रही है स्थिति के बारे में ...

एचटीएच

+0

आप FaultException कर सकते हैं। यह एक त्रुटि वापस गुजरने पर एक "सबसे अच्छा अभ्यास" है। – Erup

+0

हाँ, जो अधिक समझ में आता है ... – Sunny

3

बदले में जटिल प्रकार (डेटाकंट्रैक्ट विशेषता वाला एक और वर्ग) का उपयोग करें।

[ServiceContact] 
public OrdersResult SubmitOrders(OrdersInfo) 

[DataContract] 
public class OrdersInfo 
{ 
    Order[] Orders; 
} 

[DataContract] 
public class OrdersResult 
{ 
    ..... 
} 

की तरह इसके अलावा Order[] Orders;

+0

एक और डेटाकंट्रैक्ट obj बनाने के लिए इसकी आवश्यकता नहीं है। बस पैरामीटर के रूप में पास करें। – Erup

+0

दोनों समाधान काम करेंगे। यह डिज़ाइन से निर्भर करता है कि क्या वह पैरामेट करना चाहता है या जटिल प्रकार लौटाता है। – Incognito

2

पर DataMember जोड़ने हाँ, यह WCF संचालन को बाहर पैरामीटर लौटने समझ में आता है। प्रतिक्रिया पर, एसओएपी संदेश में वापस पास तत्व शामिल होगा।

वहाँ आंकड़ा अंतरण के बारे में MSDN पर अच्छी सामग्री हैं: Specifying Data Transfer in Service Contracts

इसके अलावा, आप SubmitOrders पर OperationContractAttribute (नहीं ServiceContractAttribute) का उपयोग करने की जरूरत है।

+0

धन्यवाद। यह सिर्फ एक टाइपो है यह कॉपीपेस्ट नहीं था, मैंने बस समस्या को सरल बना दिया और जल्दबाजी में कोड टाइप किया। –

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