2011-06-02 11 views
35

2 समाधान है: - सर्वर समाधान - ग्राहक समाधानडब्ल्यूसीएफ - संदेश भेजे/प्राप्त किए गए संदेशों का निरीक्षण करें?

सर्वर मेरी स्थानीय होस्ट आईआईएस करने के लिए खुद को पंजीकृत करता है: http://localhost/MyApp/MyService.svc

: स्थानीय होस्ट आवेदन से http://localhost/MyApp/

ग्राहक कहते हैं WCF सेवा (सेवा संदर्भ)

जब मैं क्लाइंट चला रहा हूं, तो मैं आगे और आगे भेजे गए संदेशों को देखने में सक्षम होना चाहता हूं। मैंने फिडलर को डाउनलोड किया, लेकिन ऐसा लगता है कि जब तक मैं वास्तव में एक वेब ब्राउज़र का उपयोग नहीं करता तब तक मुझे कोई ट्रैफिक नहीं भेजा जा रहा है। क्या मैं फिडलर गलत का उपयोग कर रहा हूं या क्या ऐसा कोई और उपकरण है जिसके लिए मुझे इसका उपयोग करना चाहिए?


स्पष्ट करने के लिए मैं क्या करने के लिए देख रहा हूँ देखने के लिए वास्तविक संदेश में पारित किया जा रहा है। मैं उन्हें अपने ही आँखों से नेत्रहीन देखने को छोड़कर उनके साथ कुछ भी नहीं करना चाहता।

मुझे डब्ल्यूसीएफ सेवा लॉग उपयोगिता पसंद है, लेकिन मुझे नहीं लगता कि मेरे पास सही सेटिंग है। मैं वास्तविक साबुन संदेश नहीं देख सकता, बस एक संदेश प्राप्त हुआ था।

और आगे स्पष्टीकरण के लिए, मुझे परवाह नहीं है कि जब तक मैं संदेशों को आसानी से देख सकता हूं तब तक मैं किस उपकरण का उपयोग करता हूं।

उत्तर

13

शायद मुझे कुछ याद आ रहा है, लेकिन ... आप डब्ल्यूसीएफ ट्रेसिंग सुविधाओं का उपयोग क्यों नहीं करते? यह एक शानदार समस्या निवारण उपकरण है। मैंने इसे आईआईएस/डब्ल्यूएएस में आयोजित सेवाओं के लिए भी इस्तेमाल किया है।

Enabling WCF Tracing

Btw, कुछ लोगों को यह पता नहीं है, लेकिन आप एक ही समय में सर्वर साइड और क्लाइंट साइड से निशान खोल सकते हैं, और दर्शक आप में सर्वर और ग्राहक कार्यों के बीच संबंध दिखाएगा एक अच्छा ग्राफ

संपादित करें: जब भी मुझे टीसीपी/आईपी ट्रैफिक कैप्चर करना होता है, तो मैं WireShark का उपयोग करता हूं। यदि आपको प्रोग्रामिक रूप से ऐसा करने की ज़रूरत है तो आप SharpPCAP का उपयोग कर सकते हैं, इसलिए मैं नेटवर्क से जो कैप्चर करता हूं उस पर कार्रवाई कर सकता हूं। लेकिन समस्या निवारण के लिए, डब्ल्यूसीएफ ट्रेसिंग पर भरोसा करने के लिए बहुत बेहतर है। इस StackOverflow धागा पर

+1

+1 यह ट्रेसिंग के साथ हल करने में एक समस्या है, कोड नहीं। –

+1

@ ड्रू मार्श: यह कहना असंभव है, आईएमओ, क्योंकि हम नहीं जानते कि कौन सा उद्देश्य @ माइकल संदेश देखना चाहता है। ट्रेसिंग उद्देश्यों के लिए उन्हें देखना एक बात है, दूसरा क्योंकि आप संभवतः उन्हें संशोधित करना चाहते हैं या किसी अन्य प्रकार की अधिसूचना करना चाहते हैं। – casperOne

+0

@casperOne ओपी उन्हें देखने के लिए फिडलर का उपयोग करने की कोशिश कर रहा था, इसलिए मुझे लगता है कि यह स्पष्ट है कि वे इसे नैदानिक ​​उद्देश्यों के लिए कर रहे हैं। –

0

देखो: How to use Fiddler to monitor WCF service

यह आपके कुछ प्रश्नों के उत्तर देता है। यदि आप फिडलर करते हैं, तो प्रॉक्सी सेट करने के बजाए तार पर सब कुछ जांचना चाहते हैं तो आप वायरशर्क जैसे कुछ भी उपयोग कर सकते हैं।

1

क्या आपकी सेवा SOAP या रीस्टफुल है? आप SOAP संदेश शीर्षलेख और निकायों को देखने के लिए WCF Service Trace Viewer Tool का उपयोग कर सकते हैं। ट्रेसिंग के लिए अपनी वेब सेवा को कॉन्फ़िगर करने के लिए निर्देश here हैं।

+0

कर रहे हैं तो Wireshark आपकी सहायता नहीं करेगा मेरे सर्वर में एसओएपी संदेश पारित किए गए देखें। – michael

+0

@ माइकल, हाँ आप इसके लिए डब्ल्यूसीएफ ट्रेस व्यूअर का उपयोग कर सकते हैं। मैंने बेहतर निर्देशों के साथ लिंक अपडेट किया। आपको अपनी एसओएपी सेवा में ट्रेसिंग सक्षम करने के लिए अपने web.config को मापने की आवश्यकता है। टूल का उपयोग करके, आप उस सेवा को मारने वाले सभी अनुरोध संदेश देखेंगे। – retrodrone

+2

@retrodone: निर्देश अभी भी एक ही यूआरएल को इंगित करते हैं (वास्तव में, वे एक ही लिंक हैं)। मैंने उन लिंक में जो कहा वह मैंने किया और मुझे Trace.svcLog फ़ाइल मिल गई, हालांकि मुझे वहां पर वास्तविक संदेश दिखाई नहीं देता है, भले ही मैं स्विचवैल्यू को सभी पर सेट करता हूं। मैं देखता हूं कि एक संदेश आया था, लेकिन मुझे नहीं लगता कि मैं * वास्तविक * साबुन संदेश को XML प्रारूप में कहां देख सकता हूं। – michael

5

यदि आप प्रोग्राम को व्यवस्थित रूप से जांचना चाहते हैं, तो आप implementIClientMessageInspector interface कर सकते हैं और इसे अपने ग्राहक के साथ पंजीकृत कर सकते हैं।

यह आपको सभी संदेशों तक पहुंचने की अनुमति देता है, इससे कोई फर्क नहीं पड़ता कि आप किस बाध्यकारी का उपयोग कर रहे हैं, जबकि using tools like Fiddler केवल आपको HTTP ट्रांसपोर्ट चैनल का उपयोग करके संदेशों का निरीक्षण करने की अनुमति देगा।

नोट, कि इस तकनीक का उपयोग करके, आप वास्तव में संदेशों को संशोधित कर सकते हैं या बहुत कुछ कर सकते हैं (उदाहरण के लिए नोटिफिकेशन बंद करें)। यदि आप जो करना चाहते हैं वह संदेश पर आपकी आंखें डालता है, तो using tracing आपके लिए एक आसान तरीका हो सकता है।

+5

आईसीलिएंट मैसेज इंस्पेक्टर अंतिम आउटपुट कैप्चर नहीं करता है। मैं अपने आउटगोइंग संदेशों को देखने के लिए इस विधि पर निर्भर था और यह एक सुरक्षा शीर्षलेख कैप्चर नहीं कर रहा था। इस वजह से मैंने कुछ दिनों बर्बाद कर दिया। मैंने माना कि हेडर वहां नहीं था, लेकिन आखिर में मैंने अपने क्लाइंट को एएसएमएक्स वेब सेवा सर्वर पर इंगित किया, जिसमें पुराना पुराना संदेश लॉगिंग था जो वास्तव में प्री-डब्ल्यूसीएफ काम करता था और मैंने देखा कि मेरा हेडर वास्तव में वहां था। – JohnOpincar

36

संदेश सामग्री देखने के लिए आपको System.ServiceModel.MessageLogging के लिए एक स्रोत जोड़ना होगा अपनी कॉन्फ़िगरेशन फ़ाइल में। ट्रेस व्यूअर में संदेश टैब किसी विशेष सेवा कॉल के लिए पूरा संदेश दिखाएगा।

<configuration> 

... 

    <system.diagnostics> 
     <sources> 
     <source name="System.ServiceModel" 
         switchValue="All" 
         propagateActivity="true"> 
      <listeners> 
       <add name="traceListener" /> 
      </listeners> 
     </source> 
     <source name="System.ServiceModel.MessageLogging" 
         switchValue="All"> 
      <listeners> 
       <add name="traceListener" /> 
      </listeners> 
     </source> 
     </sources> 
     <sharedListeners> 
     <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="c:\Traces.svclog" /> 
     </sharedListeners> 
    </system.diagnostics> 

    <system.serviceModel> 
    <diagnostics> 
     <messageLogging logEntireMessage="true" 
            logMalformedMessages="true" 
            logMessagesAtServiceLevel="true" 
            logMessagesAtTransportLevel="true" 
            maxMessagesToLog="500"/> 
    </diagnostics> 

... 

</system.serviceModel> 

... 

</configuration> 

अधिक जानकारी के लिए MSDN पर कॉन्फ़िगर ट्रेसिंग विषय देखें:

यहां एक नमूना विन्यास फाइल है। http://msdn.microsoft.com/en-us/library/ms733025.aspx

+12

मुझे 'System.ServiceModel.MessageLogging' से 'propagateActivity =" true "' को हटा देना था और फिर यह मेरे लिए काम किया – Zane

+0

यह समाधान मेरे लिए (जेन की एनोटेशन के साथ) काम करता था, जहां मुझे मिले अन्य प्रस्तावित समाधान अपूर्ण थे। –

+0

यदि आपने पुष्टि की है कि 'propagateActivity = "true" को हटाया जाना चाहिए, तो जवाब को ठीक क्यों नहीं करें? धन्यवाद। – Rbjz