मैं संदेश अनुबंधों के साथ डब्ल्यूसीएफ स्ट्रीमिंग का उपयोग करने की कोशिश कर रहा हूं, क्योंकि मुझे स्ट्रीम के बगल में अतिरिक्त पैरामीटर की आवश्यकता है।डब्ल्यूसीएफ: संदेश संविदाओं के साथ स्ट्रीमिंग का उपयोग
मूल रूप से मैं शीर्ष पर कुछ अतिरिक्त तर्क के साथ एक फ़ाइल अपलोड और डाउनलोड सेवा बना रहा हूं। '/' आवेदन में
सर्वर त्रुटि:
दुर्भाग्य से, जब मुझे लगता है कि सब कुछ ठीक है की जाँच करने के ब्राउज़र से सेवा प्राप्त करने का प्रयास, मैं निम्नलिखित त्रुटि मिलती है। अनुबंध 'IFileTransferService' में ऑपरेशन 'अपलोडफाइल' एक संदेश नियंत्रण का उपयोग करता है जिसमें SOAP शीर्षलेख हैं। SOAP शीर्षलेख किसी भी संदेश संदेश द्वारा समर्थित नहीं हैं।
दुर्भाग्यवश इसके लिए गुगल करने से कोई महत्वपूर्ण परिणाम नहीं मिला जिसने मेरी मदद की। क्या आप लोग मेरी मदद कर सकते हैं? यहां सेवा के विवरण (मैंने अंतरिक्ष के कारण डाउनलोड हिस्से को हटा दिया है)।
<customBinding>
<binding name="customHttpBindingStream">
<textMessageEncoding messageVersion="Soap12" />
<httpTransport transferMode="Streamed" maxReceivedMessageSize="2147483647"/>
</binding>
</customBinding>
अद्यतन:
[ServiceContract(Namespace = "http://www.acme.org/2009/04")]
public interface IFileTransferService
{
[OperationContract(Action = "UploadFile")]
void UploadFile(FileUploadMessage request);
}
[MessageContract]
public class FileUploadMessage
{
[MessageHeader(MustUnderstand = true)]
public FileMetaData Metadata { get; set; }
[MessageBodyMember(Order = 1)]
public Stream FileByteStream { get; set; }
}
[DataContract(Namespace = "http://schemas.acme.org/2009/04")]
public class FileMetaData
{
[DataMember(Name="FileType", Order=0, IsRequired=true)]
public FileTypeEnum fileType;
[DataMember(Name="localFilename", Order=1, IsRequired=false)]
public string localFileName;
[DataMember(Name = "remoteFilename", Order = 2, IsRequired = false)]
public string remoteFileName;
}
मैं दोनों basichttpbinding और एक customhttp नहीं सकारात्मक प्रभाव के साथ बंधन का उपयोग करने की कोशिश की है प्रलेखन ऑनलाइन पढ़ने ऐसा लगता है कि MessageContracts साथ स्ट्रीमिंग वास्तव में संभव हो जाना चाहिए। MSDN (Large Data and Streaming), उदाहरण के लिए देखें:
Programming Model for Streamed Transfers
The programming model for streaming is straightforward. For receiving streamed data, specify an operation contract that has a single Stream typed input parameter. For returning streamed data, return a Stream reference. [...] This rule similarly applies to message contracts. As shown in the following message contract, you can have only a single body member in your message contract that is a stream. If you want to communicate additional information with the stream, this information must be a carried in message headers. The message body is exclusively reserved for the stream content.
[MessageContract]
public class UploadStreamMessage
{
[MessageHeader]
public string appRef;
[MessageBodyMember]
public Stream data;
}
मैं भी फाइल अपलोड की सेवाओं को पूरा करने के लोगों से ब्लॉग पोस्ट देखा है और बहुत मैं क्या एक साथ (उदाहरण के here के लिए) डाल करने के लिए कोशिश कर रहा हूँ के लिए इसी तरह डाउनलोड किया है।
अद्यतन 2 मैं एक छोटे से सांत्वना और स्वयं एक basicHttpBinding साथ होस्टिंग सेवा बनाने की कोशिश की है और वहाँ यह एक आकर्षण की तरह काम करता है। मुझे विश्वास है कि समस्या आईआईएस पर होस्टिंग हो सकती है। कोई उपाय?
अद्यतन 3 मेरा अपना उत्तर देखें।
मेरा मानना है कि 'MessageBodyMember' विशेषता में' ऑर्डर = 1' अनावश्यक है क्योंकि आपके पास केवल एक बॉडी तत्व –