में कच्चे अनुरोध को लॉग इन करने के लिए मेरे पास कई विधियों के साथ एक डब्ल्यूसीएफ सेवा है। मैं क्लाइंट से आया कच्चे अनुरोध को लॉग इन करना चाहता हूं चाहे यह कैसे भेजा गया था। एक विधि एक क्वेरी स्ट्रिंग (सख्ती से विरासत का समर्थन के लिए) के रूप में डेटा स्वीकार करता है जो मैं का उपयोग कर लॉग ऑन कर सकते हैं:WCF सेवा
OperationContext.Current.IncomingMessageHeaders.To.AbsoluteUri
है कि परिदृश्य में पर्याप्त है, लेकिन अन्य तरीकों ग्राहक उत्पन्न एक प्रॉक्सी वर्ग का उपयोग कर XML के रूप में डेटा भेजने के लिए अनुमति देते हैं svcutil.exe द्वारा। शरीर की:
OperationContext.Current.RequestContext.RequestMessage
दुर्भाग्य से, कोई बात नहीं क्या मैं मैं संदेश की एक बफ़र प्रतिलिपि नहीं बना सकते से पहले इसे पढ़ा है की कोशिश इस परिदृश्य में मैं डेटा मैं में चाहते हैं मिल गया है।
यह संदेश आपरेशन का समर्थन नहीं कर सकते क्योंकि इसे पढ़ कर दिया गया है
public CascadeResponse SendCustomer(Customer c)
{
Message msg = OperationContext.Current.RequestContext.RequestMessage.CreateBufferedCopy(Int32.MaxValue).CreateMessage();
LogMessage(msg);
// Now that the request is logged, get on with the rest
}
SendCustomer की पहली पंक्ति पर फिर भी, मैं निम्नलिखित त्रुटि मिलती है, यहाँ एक उदाहरण है।
यह मेरे बारे में बफर्ड प्रतिलिपि बनाने का मुद्दा है, निश्चित रूप से? मुझे लगता है कि मैं यहां कुछ मूल रूप से गलत कर रहा हूं।
संपादित करें:
ठीक है, तो विधि अब इस तरह है:
public CascadeResponse SendCustomer(Message requestMessage)
{
Message msg = OperationContext.Current.RequestContext.RequestMessage.CreateBufferedCopy(Int32.MaxValue).CreateMessage();
LogMessage(msg);
// Now that the request is logged, get on with the rest
Customer c = msg.GetBody<Customer>();
string clientKey = "1111"; // This should be the clientKey string passed to the function along with the customer
return SendLead(c, clientKey);
}
मेरे समस्या मैं कैसे ग्राहक पाने के लिए और ClientKey अलग संस्थाओं के रूप में भेजा नहीं पता है कि है। मैं क्लाइंट को ग्राहक की संपत्ति बना सकता हूं (या कस्टम ऑब्जेक्ट बना सकता हूं जो विशेष रूप से डेटा पास करने के लिए है और इसमें ग्राहक और क्लाइंटकी विशेषताएँ हैं), लेकिन यदि संभव हो तो मैं इससे बचना चाहूंगा, क्योंकि यह विरासत प्रणाली का अपग्रेड है पहले से ही इस तरह से काम करता है।
मुझे अपनी प्रॉक्सी कक्षाएं बनाने के लिए svcUtil.exe का उपयोग करने में भी समस्या हो रही है - मुझे लगता है कि उपर्युक्त विधि हस्ताक्षर होने का मतलब है कि मेरी सेवा अब अनुरोध भेजने के लिए सही हस्ताक्षर का विज्ञापन नहीं करेगी? सुनिश्चित नहीं है कि यह पर्याप्त स्पष्ट है - अगर मेरी एकमात्र इनपुट विधि संदेश वस्तु स्वीकार करती है, तो मेरा ग्राहक ग्राहक और क्लाइंटकी को भेजने के बारे में कैसे जानता है?
कोई कारण नहीं है कि आप डब्ल्यूसीएफ में अंतर्निहित ट्रेसिंग कार्यक्षमता का उपयोग क्यों नहीं कर सकते? http://msdn.microsoft.com/en-us/library/ms733025.aspx – DaveRead
@ डेव रीड मुख्य रूप से मुझे इसके बारे में पता नहीं था - क्या इससे मुझे अपने लॉग को डेटाबेस में सहेजने की अनुमति मिलती है? – Maloric
बॉक्स से बाहर नहीं है लेकिन आप अपना खुद का कस्टम ट्रेस लिस्टर बना सकते हैं, विवरण के लिए यह आलेख देखें: http://msdn.microsoft.com/en-gb/magazine/cc300790.aspx – DaveRead