2010-07-26 10 views
10

में एसओएपी वेब सेवा का उपभोग करना मेरे पास एक एसओएपी डब्लूएसडीएल है (यहां पाया गया: https://portal.bsh-partner.com/picenter/server/a2a/) और मैं वेब सेवाओं का उपभोग करने की कोशिश कर रहा हूं।एएसपी.नेट

var soapEnvelope = string.Empty; 
soapEnvelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; 
soapEnvelope += "<soapenv:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:q0=\"http://thexmlhost.com\">"; 
soapEnvelope += "<q0:Connect>"; 
soapEnvelope += "<q0:Username>username</q0:Username>"; 
soapEnvelope += "<q0:Password>password</q0:Password>"; 
soapEnvelope += "</q0:Connect>"; 
soapEnvelope += "</soapenv:Body>"; 
soapEnvelope += "</soapenv:Envelope>"; 

var xmlHttp = new MSXML2.ServerXMLHTTP40(); 
xmlHttp.open("POST", "https://thexmlhost.com/", "", ""); 
xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); 
xmlHttp.setRequestHeader("SOAPAction", "thexmlhost.com/"); 

xmlHttp.send(soapEnvelope); 

xmlHttp.waitForResponse(500); 

var outXml = xmlHttp.responseText; 

प्रतिक्रिया सामान्य HTTP प्रतिक्रिया त्रुटि पृष्ठ लौटती रहती है। किसी भी विचार से मुझे वेब साबुन से उचित प्रतिक्रिया प्राप्त करने के लिए अपने साबुन लिफाफे को कैसे पारित किया जाना चाहिए?

+3

दुनिया में क्यों आप एक साबुन संदेश तैयार कर रहे हैं? –

+2

आईडीक अगर मुझे इसे ऊपर उठाना चाहिए क्योंकि यह गलत कारण है या इसे उसी कारण से डाउनवॉइट करने का एक शानदार उदाहरण है ... –

उत्तर

9

मैंने अभी देखा है कि आप सर्वर कोड पर इस कोड का उपयोग कर रहे हैं।


यह .NET में वेब सेवाओं का उपभोग करने का तरीका नहीं है। प्रॉक्सी कक्षाओं को बनाने के लिए विजुअल स्टूडियो में "सेवा जोड़ें संदर्भ" कमांड का उपयोग करें जो आपको सेवा को आसानी से उपभोग करने की अनुमति देगा।

उदाहरण के लिए How to Consume a Web Service देखें, साथ ही http://msdn.microsoft.com/wcf/

इसके अलावा, कभी भी XML के साथ काम करते समय स्ट्रिंग मैनिपुलेशन तकनीकों का उपयोग करें। संक्षेप में, तारों के लिए नियम और एक्सएमएल के लिए नियम अलग हैं। एक्सएमएल के साथ काम करने के लिए .NET के कई एक्सएमएल एपीआई हैं, और वे सभी नियमों को जानते हैं।

+0

आपका क्या मतलब है "सर्वर पक्ष से एसओएपी सेवा का उपभोग करना आमतौर पर बेहतर होता है। यह बहुत आसान है । " ? –

+0

@Allen: जब तक मैंने "string.Empty'" नहीं देखा, मैंने सोचा कि यह जावास्क्रिप्ट था। –

+0

आह जो समझ में आता है –

3

बस अपने कोड पर एक नज़र में, ऐसा लगता है कि आप अपने शरीर को स्टार्ट टैग को जोड़ने के लिए भूल गया: <soapenv:Body>

जब तक आप मैन्युअल रूप से अपने संदेश के निर्माण होने के लिए एक विशेष कारण है, मैं अत्यधिक एक प्रॉक्सी का उपयोग उत्पन्न का उपयोग कर की सिफारिश करेंगे svcutil.exe उपकरण जो दृश्य स्टूडियो 2008 या बाद में आता है। (यदि आप "सेवा जोड़ें संदर्भ" सुविधा का उपयोग करते हैं तो यह टूल विजुअल स्टूडियो द्वारा स्वचालित रूप से उपयोग किया जाता है), यह मानते हुए कि आपको अपनी वेब सेवा के साथ संचार को संभालने के लिए डब्ल्यूसीएफ का उपयोग करने में कोई समस्या नहीं है।

वैकल्पिक रूप से, अगर किसी कारण से आप डब्ल्यूसीएफ का उपयोग नहीं कर सकते हैं, जैसे कि यदि आप विजुअल स्टूडियो 2005 के साथ .NET 2.0 में विकसित होने के लिए होते हैं, तो इस मामले में आपके पास "सेवा जोड़ें संदर्भ" सुविधा उपलब्ध नहीं होगी, तो क्या अभी भी अपनी वेब सेवा के लिए प्रॉक्सी उत्पन्न करने के लिए विजुअल स्टूडियो के पुराने "वेब संदर्भ जोड़ें" सुविधा का उपयोग करें। यह सुविधा svcutil.exe की बजाय wsdl.exe उपकरण का उपयोग करती है।

अन्यथा, यदि आपको वास्तव में एसओएपी संदेश मैन्युअल रूप से बनाने के इस दृष्टिकोण के साथ जारी रखना चाहिए, तो मैं कम से कम आपके आवेदन में कुछ लॉगिंग जोड़ने की सलाह दूंगा ताकि आप कुछ गलत होने पर निर्मित संदेश का अधिक आसानी से विश्लेषण कर सकें।

+0

(तर्कसंगत रूप से गलत होने के कारण मेरी पिछली टिप्पणी हटा दी गई) मैं आपके बिंदु पर सहमत हूं; इस बिंदु पर डब्ल्यूसीएफ उपलब्ध होने पर अनुशंसित दृष्टिकोण होना चाहिए। ध्यान दें कि वीएस -2010 एएसपी.नेट वेब सेवाओं (http://msdn.microsoft.com/en-us/library/yzbxwf53.aspx) के तहत एमएसडीएन पर कई लिंक विशेष रूप से उल्लेख करते हैं कि "वेब संदर्भ"/wsdl.exe कार्यक्षमता विरासत है और पिछड़े संगतता के लिए प्रदान की जाती है। –

21

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

उम्मीद है कि मदद करता है।

+2

अंत में, एक वेब संदर्भ का सुझाव देने के लिए एक साइन जवाब –

+1

-1। –

+0

@ जॉन - क्या आप विस्तारित कर सकते हैं? संपादित करें: निश्चित रूप से आप 'सेवा संदर्भ' शब्दावली का उपयोग नहीं करने के मेरे मामूली गलत पैस का मतलब नहीं है? मैं विधिवत अद्यतन करूँगा और परेशान रहूंगा क्योंकि यह बुरा जवाब क्यों देता है .. –