2008-11-27 18 views
12

मैं डब्ल्यूसीएफ का उपयोग कर रहा हूं और क्लाइंट से सर्वर पर एक बड़ी फाइल अपलोड करना चाहता हूं।डब्ल्यूसीएफ चंकिंग/स्ट्रीमिंग

[OperationContract(IsOneWay=true)] 
[ChunkingBehavior(ChunkingAppliesTo.InMessage)] 
void UploadStream(Stream stream); 

नमूना अपलोड हो रहे हैं बल्कि सुविधाजनक उदाहरण का उपयोग करता है: मैं की जांच की और बेडौल दृष्टिकोण http://msdn.microsoft.com/en-us/library/aa717050.aspx

हालांकि पर उल्लिखित निर्देशों का पालन करने का फैसला किया, इस दृष्टिकोण (बस स्ट्रीमिंग की तरह) सीमित विधि signitures के अनुबंध को प्रतिबंधित करता है एक निश्चित पथ से एक फ़ाइल और सर्वर पर एक निश्चित पथ में सहेजना। इसलिए, मेरा सवाल यह है कि मैं फ़ाइल नाम, फ़ाइलपैथ इत्यादि जैसी चीजों को निर्दिष्ट करने के लिए अतिरिक्त पैरामीटर कैसे पास करूं।

उदाहरण के लिए।

[OperationContract(IsOneWay=true)] 
[ChunkingBehavior(ChunkingAppliesTo.InMessage)] 
void UploadStream(Stream stream, String filePath); 

अग्रिम धन्यवाद, मार्क: मैं की तरह कुछ करना चाहते हैं।

उत्तर

3

आप अपनी सेवा सत्र-पूर्ण बना सकते हैं और IsInitiating प्रॉपर्टी सेट के साथ अनुबंध में प्रारंभिक विधि निर्धारित कर सकते हैं। कुछ की तरह:

[OperationContract(IsInitiating = true)] 
void InitializeUploadService(string filename); 

[OperationContract(IsOneWay = true, IsInitiating = false)] 
[ChunkingBehavior(ChunkingAppliesTo.InMessage)] 
void UploadStream(Stream stream); 

मैं स्ट्रीमिंग सेवाओं के साथ इसे करने की कोशिश कभी नहीं किया है, लेकिन यह मूल रूप से WCF लागू कि InitializeUploadService हमेशा UploadStream से पहले कहा जाता है बनाना चाहिए।

अधिक प्रलेखन यहां पाया जा सकता: http://msdn.microsoft.com/en-us/library/system.servicemodel.description.operationdescription.isinitiating.aspx

13

This article बताते हैं कि कैसे MessageHeader विशेषता का उपयोग करने चीजें शीर्षक में पारित होने के लिए मजबूर करने के लिए, और इसलिए एक पैरामीटर के रूप में गिनती नहीं। तो, एक स्ट्रीम और अन्य मेटा डेटा पास करने के बजाय, एक वर्ग बनाएं जिसमें विशेषता संदेश है और मैसेजहेडर के रूप में सभी मेटा डेटा को चिह्नित करें। फिर, स्ट्रीम को MessageBodyMember के रूप में चिह्नित करें (जिसे आलेख गलत है "संदेशबॉडी")। क्या आपकी अपलोडस्ट्रीम विधि एक एकल पैरामीटर लेती है जिसका प्रकार आपके द्वारा बनाए गए संदेशकंट्रैक्ट क्लास का प्रकार है। मैंने इसे सफलतापूर्वक किया है, लेकिन मैंने इसे चंकिंग के साथ नहीं किया है। सौभाग्य।

1

मैं MessageContracts को देखो और अपने ऑब्जेक्ट के लिए संदेश हेडर के रूप में उन मूल्यों को जोड़ना होगा। यह आपको स्ट्रीम हेडर के रूप में धारा से संबंधित धारा और किसी भी मूल्य को पारित करने की अनुमति दे सकता है।