2008-09-29 16 views
6

पर .NET लॉग साबुन अनुरोध मैं अपने क्लाइंट एप्लिकेशन में किसी तृतीय पक्ष .NET WebService का उपभोग कर रहा हूं। डीबगिंग उद्देश्यों के लिए मैं अपने सर्वर से भेजे जा रहे एसओएपी अनुरोधों को कैप्चर करना चाहता हूं। मैं ऐसा कैसे कर पाऊंगा? यह डब्ल्यूसीएफ या डब्लूएसई के उपयोग के बिना .NET 2.0 पर किया जा रहा है।क्लाइंट

उत्तर

5

यदि यह डिबगिंग उद्देश्यों के लिए है तो मैं सिर्फ वेब अनुरोध को प्रॉक्सी का उपयोग करने के लिए कॉन्फ़िगर करता हूं और पूरे अनुरोध को फिडलर (http://www.fiddlertool.com) भेजता हूं, फिर आप देख सकते हैं कि तार पर क्या चल रहा है।

+0

मैंने फिडलर को छोड़ने और कोशिश करने से पहले कोड में ऐसा करने के लगभग 6 अलग-अलग तरीकों की कोशिश की। अगर मैंने इसके बारे में पढ़ा और देखा कि यह एन्क्रिप्टेड ट्रैफिक का समर्थन करता है तो मैंने पहले इसके साथ शुरुआत की होगी। – carson

1

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

व्यक्तिगत रूप से, मैं साइमन फेल के TcpTrace और YATT का लंबे समय से उपयोगकर्ता रहा हूं।

यदि आप वास्तव में कोड को मापने में रूचि रखते हैं ताकि यह इसे स्वयं (कहें, किसी फ़ाइल या किसी चीज़ पर लॉग इन करके) कर सकता है, तो हो सकता है कि आप अपने सर्वर पर SoapExtension को कार्यान्वित करना चाहें।

11

मैंने कुछ समय पहले इस बारे में एक पोस्ट लिखा जिसका शीर्षक "Logging SOAP Messages in .NET"।

सबसे आसान तरीका है .NET के साथ पहले से प्रदान किए गए टूल का उपयोग करें।

1. वर्ग SoapExtension बढ़ाएँ।

2. ओवरराइड विधि ProcessMessage एक पाठ फ़ाइल या ईवेंट लॉग करने के लिए इस जानकारी को अपने साबुन अनुरोध की एक पूरी उत्पादन, तो उत्पादन प्राप्त करने के लिए।

public class SoapMessageLogger : SoapExtension 
{ 
    //… 
    public override void ProcessMessage(SoapMessage message) 
    { 
    switch(message.Stage) 
    { 
     case SoapMessageStage.BeforeDeserialize: 
     LogResponse(message); break; 
     case SoapMessageStage.AfterSerialize: 
     LogResponse(message); break; 
     // Do nothing on other states 
     case SoapMessageStage.AfterDeserialize; 
     case SoapMessageStage.BeforeSerialize; 
     default: break; 
    } 
    } 
    //… 
} 
0

शायद wireshark? मैं हमेशा अपने अनुप्रयोगों के यातायात को पकड़ने के लिए इसका उपयोग कर रहा हूं।