2016-11-14 9 views
8

मैं सी # अनुप्रयोग से वेब सेवा को कॉल करने के लिए कोशिश कर रहा हूँ, लेकिन मैं अपवाद हो रही है:सिस्टम.Web.Services.Protocols.SoapHttpClientProtocol.invoke (विंडोज मोबाइल से) को डिबग/ट्रेस कैसे करें?

InvalidOperationException 
client found response content type of 'text/html; charset=utf-8', but expected 'text/xml' 

मैं अनुरोध और प्रतिक्रिया संदेशों को URL कैसे देख सकता है? मेरी सेवा डेस्कटॉप पर चलती है, लेकिन क्लाइंट विंडोज मोबाइल सीई 6.x पर चलता है, मोबाइल डिवाइस यूएसबी का उपयोग कर डेकटॉप से ​​जुड़ा हुआ है। असल में यही कारण है कि मुझे वायरसहार्क या फिडलर में HTTP यातायात नहीं दिख रहा है (मैंने दोनों की कोशिश की है)। सेवा काम करती है - मैं पोस्टमैन का उपयोग करके इसे देख सकता हूं (विधि सही और सार्थक परिणाम एक्सएमएल देता है)।

+0

एक webservice लौटने वाले HTML का अर्थ यह हो सकता है कि कोई त्रुटि हुई और इसलिए सर्वर प्रतिक्रिया xml के बजाय एक त्रुटि पृष्ठ है। यदि आप सर्वर पर क्या हुआ लॉग कर सकते हैं तो यह मदद कर सकता है। – derloopkat

+0

शायद आप फिडलर के उपयोग को सक्षम करने के लिए मोबाइल डिवाइस के लिए प्रॉक्सी के रूप में अपनी dev-machine का उपयोग कर सकते हैं? – martennis

उत्तर

3

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

मेरे मामले में ठीक नहीं रह सेवा संदर्भ में संक्षिप्त URL का उल्लेख है, और पूर्ण URL बाहर टाइप करने के लिए था (उर्फ, साइट के लिए डिफ़ॉल्ट दस्तावेज़ संपत्ति का उपयोग नहीं।)

+0

मुझे लगता है कि मूल प्रश्न एसओएपी संदेशों के अंदर और बाहर प्रिंट करने के लिए है। उम्मीद है कि आपका जवाब भी मदद करता है! – morhook

+0

हां - इस साथी की मूल समस्या को हल करने में मदद करने के लिए आप पर शर्म की बात है।उस ने कहा, शायद आपको इसे अपने प्रश्न पर टिप्पणी के रूप में करना चाहिए था। – STLDeveloper

+2

खैर, एक कारण है कि मैंने सुझाव दिया कि मैंने क्या किया। उनका सवाल * एक समस्या को डीबग करने के बारे में था ... लेकिन मेरी टिप्पणी यह ​​थी कि उनके मुद्दे के लिए एक फिक्स क्या हो सकता है (जो उसे कुछ डिबगिंग समय बचा सकता है।) मुझे पता है कि जब मैं भाग गया तो मुझे लगभग एक दिन के विकास के समय में फिसल गया इसके पार - और जैसे मैंने कहा, यह वही त्रुटि संदेश है जो मुझे बेहद समान परिस्थितियों में मिला है (स्थानीय रूप से काम किया, सेवा संदर्भ प्राप्त करने/अपडेट करने के लिए स्थानीय रूप से गैर-स्थानीय रूप से काम किया, लेकिन वास्तव में चलाने पर गैर-स्थानीय रूप से काम नहीं किया।) एह - अगर यह उसकी मदद नहीं करता है, तो भविष्य में किसी और की मदद करने का एक अच्छा मौका है। :-) – Kevin

4

आप बदल सकते हैं कुछ पुस्तकालयों पर डीबग पर जो आंतरिक रूप से HTTP कॉल करते हैं (मेरे मामले में, वे HTTPS हैं, इसलिए वायरशर्क के माध्यम से निरीक्षण करना असंभव है)।

आप अपने app.config में जोड़ना चाहिए:

<system.diagnostics> 
    <trace autoflush="true"/> 
    <sources> 
     <source name="System.Net" tracemode="protocolonly" maxdatasize="1024"> 
     <listeners> 
      <add name="TraceFile"/> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener" 
     initializeData="trace.log"/> 
    </sharedListeners> 
    <switches> 
     <add name="System.Net" value="Verbose"/> 
    </switches> 
</system.diagnostics> 

यह एक trace.log जहाँ आपके exe रन जोड़ देगा। यदि आप नहीं जानते कि आपकी सेवा कहां चल रही है, तो आप एक गैर-सापेक्ष पथ डाल सकते हैं।

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

पीएस .: यदि आप अनुरोध और प्रतिक्रियाओं और खुले कनेक्शन को बंद करने (मेरे मामले HTTPS पर) के शीर्षकों की आवश्यकता है तो आप लॉग स्तर को "सूचना" में बदल सकते हैं।

2

एसओएपी क्लाइंट को डीबग करने का सबसे आसान और सबसे अच्छा तरीका एक एसओएपी एक्सटेंशन बनाना है जो वेब सेवा या वेब सेवा क्लाइंट से भेजे गए एसओएपी संदेशों को लॉग करता है।

codeproject एक अच्छा ट्यूटोरियल कैसे इस ठीक से करना है: Efficient Tracing Using SOAP Extensions in .NET

और यहाँ है एक छोटी MSDN लेख: How to: Implement a SOAP Extension

वहाँ भी है कि पैसे के लायक हैं वाणिज्यिक सोप Debuggers बाहर, XML Spy SOAP Debugger या की तरह हैं SOAPSonar जो सत्यापन और आमंत्रण करता है।

बीटीडब्लू: यदि आप PHP या जावा का उपयोग करेंगे तो आप मूल रूप से एक ही दृष्टिकोण का उपयोग करेंगे।

संबंधित मुद्दे