2010-01-25 9 views
5

तार पर जाने के लिए -innerXML में हो रही उद्धरण के रूप में "

लघु संस्करण (चेतावनी एक्सएमएल और नीचे अनावश्यक वर्ण एन्कोडिंग का अपवित्र मिश्रण।): मैं क्यों नहीं कर सकते हैं मेरी सेवा संदर्भ कॉल (ग # , .NET 3.5, ऑटोमैजिक सेवा संदर्भ कोड VS2008 में जोड़ा गया है) इस पैरा को ठीक तरह से पैरामीटर को एन्कोड करने के लिए: (" बिट्स देखें ... वे मेरे हैं।)

(अन्य अतिरिक्त साबुन-वाई बिट्स स्पष्टता के लिए हटा दिए गए हैं)

<SOAP-ENV:Body><SOAPSDK4:SetCondition xmlns:SOAPSDK4="http://tempuri.org/message/"> 
<sharedSecret>buggerall</sharedSecret> 

<xmlData>&lt;SEARCHINFO_LIST&gt;&lt;SEARCH_INFO action=&quot;add&quot; status=& 
quot;3&quot; name=&quot;TestProfile2&quot; mask=&quot;0&quot; campaign_id=&quot;33&quot; 
campaign_protected=&quot;N&quot; condition_protected=&quot;N&quot;&gt;&lt;CONDITIONS/& 
gt;&lt;EXPRESSIONS/&gt;&lt;/SEARCH_INFO&gt;&lt;/SEARCHINFO_LIST&gt;</xmlData> 
</SOAPSDK4:SetCondition></SOAP-ENV:Body> 

मैंने पैरामीटर सेट किया है, कॉल करें ... और सेवा एक अच्छा संदेश देती है "कोई सूओ - आपके लिए साबुन!"

action=\"add\" 

जो मुझे तार पर यह दिया (Fiddler के माध्यम से): action="add"

action=&quot;add&quot; 

जो दिया

मैं अपने से पारित कर दिया करने के लिए-वेब सेवा पैरामीटर स्ट्रिंग में कई अन्य स्वरूपों की कोशिश की मुझे यह तार पर: action=&amp;quot;add&amp;quot;

और विभिन्न संयोजन (action = "" add ""?!) html.encode, url.encode के साथ जो बहुत अधिक पूर्ण हो गया है ly bombed, या तार पर डबल उद्धरण के रूप में दिखाया।

ओह, और मैंने आसपास भी <![CDATA[&quot;]] की कोशिश की। वह या तो काम नहीं किया।

क्या साबुन संदेश के आंतरिक HTML बिट में डबल कोट एन्कोडिंग को मजबूर करने का कोई तरीका है?

* (क्योंकि है कि कैसे सेवा उन्हें चाहता है सवाल पूछने नहीं है इन ड्रौयड आप देख रहे हैं नहीं कर रहे हैं।।)

* * * लांग, कुटिल संस्करण:

मैं कुछ प्रक्रियाओं को स्वचालित करने के लिए एक ऐप लिख रहा हूं जो वर्तमान में ए (विनफॉर्म) प्रशासनिक जीयूआई ऐप द्वारा संचालित हैं। (असल में, यह एक एमएमसी स्नैप है। वैसे भी।)

अपने कार्यों को पूरा करने के लिए, Winform ऐप मानक वेब सेवा कॉल के माध्यम से इसके सर्वर के साथ संचार करता है।

मैं वीएस -2008 की निफ्टी "वेब सेवा संदर्भ" ऑटो पीढ़ी की चीज़ (यह तकनीकी विवरण है) का उपयोग कर रहा हूं, और मैंने सफलतापूर्वक वेब सेवा को प्रमाणित किया है। यह सुनिश्चित करने के लिए कि मैं चीजों को सही तरीके से कर रहा था, मैंने GUI ऐप से कॉल पर कब्जा कर लिया, और फिर उनसे तुलना की जो मैं तार पर भेज रहा था। सब अच्छा था। तब मैं एम्परसैंड की बुराई में भाग गया।

<?xml version="1.0" encoding="UTF-8" standalone="no"?><SOAP-ENV:Envelope 
xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2=" 
http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3=" 
http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV=" 
http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAPSDK4:SetCondition 
xmlns:SOAPSDK4="http://tempuri.org/message/"><sharedSecret>0500001007C3525F3-F315-460D- 
AF5C-D84767130126094</sharedSecret><xmlData>&lt;SEARCHINFO_LIST&gt;&lt;SEARCH_INFO 
action=&quot;add&quot; status=&quot;3&quot; name=&quot;TestProfile2&quot; mask=& 
quot;0&quot; campaign_id=&quot;33&quot;campaign_protected=&quot;N&quot; 
condition_protected=&quot;N&quot;&gt;&lt;CONDITIONS/&gt;&lt;EXPRESSIONS/&gt;& 
lt;/SEARCH_INFO&gt;&lt;/SEARCHINFO_LIST&gt;</xmlData></SOAPSDK4:SetCondition></SOAP- 
ENV:Body></SOAP-ENV:Envelope> 
(मैं एप्लिकेशन Fiddler के माध्यम से इस भेजने पर कब्जा कर लिया): (अधिक ठीक से, कैसे चीजें ठीक से एन्कोड करने के लिए प्राप्त करने के लिए)

कॉल में से एक के लिए, वेब सेवा कुछ इस तरह देखने के लिए उम्मीद

प्रासंगिक बिट दिखाने के लिए सभी अतिरिक्त SOAP-y सामग्री को बाहर निकालना - यह <xmlData> अनुभाग है जो पारित हो गया है। सूचना &quot; मापदंडों आसपास:

var serviceParams = "<SEARCHINFO-LIST><SEARCH_INFO action=\"add\" 
status=\"3\" name=\"TestProfileFromExternApp\" mask=\"0\" campaign_id=\"33\" 
campaign_protected=\"N\" 
condition_protected=\"N\"><CONDITIONS/><EXPRESSIONS/></SEARCH_INFO></SEARCHINFO_LIST>"; 

मेरे ऐप तार पर इसे बाहर भेजता है, तो Fiddler इस कब्जा: फिर से (

&lt;SEARCHINFO_LIST&gt;&lt;SEARCH_INFO action=&quot;add&quot; 
status=&quot;3&quot; name=&quot;TestProfile2&quot; mask=&quot;0&quot; 
campaign_id=&quot;33&quot; campaign_protected=&quot;N&quot; 
condition_protected=&quot;N&quot;&gt;&lt;CONDITIONS/&gt;&lt;EXPRESSIONS/&gt;& 
lt;/SEARCH_INFO&gt;&lt;/SEARCHINFO_LIST&gt; 

मेरे कोड में, मैं एक स्ट्रिंग तो तरह का निर्माण किया है , सभी सोप सामान बाहर अलग करना)

&lt;SEARCHINFO-LIST&gt;&lt;SEARCH_INFO action="add" status="3" 
name="TestProfileFromExternApp" mask="0" campaign_id="33" 
campaign_protected="N" condition_protected="N"&gt;&lt;CONDITIONS/&gt; 
&lt;EXPRESSIONS/&gt;&lt;/SEARCH_INFO&gt;&lt;/SEARCHINFO_LIST&gt; 

और प्राप्त सेवा वापस है कि यह यह पसंद नहीं करता एक त्रुटि भेजता है। यह &quot; डी ## नाइट चाहता है।

कोण ब्रैकेट ठीक से एन्कोड किए जाते हैं, लेकिन उद्धरण HTTP स्ट्रिंग में मान्य हैं, और एन्कोडेड नहीं होते हैं।

"आह-हा!" मैं कहता हूं, "मैं सिर्फ चीजों को मैन्युअल रूप से एन्कोड कर दूंगा!"। मैं करने का प्रयास किया कुछ इस तरह करते हैं:

var serviceParams = "<SEARCHINFO-LIST><SEARCH_INFO action=&quot;add&quot; 
status=&quot;3&quot; name=&quot;TestProfileFromExternApp&quot; 
mask=&quot;0&quot; campaign_id=&quot;33&quot; 
campaign_protected=&quot;N&quot; 
condition_protected=&quot;N&quot;><CONDITIONS/><EXPRESSIONS/></SEARCH_INFO></SEARCHINFO_LIST>"; 

कौन सा रूप में बाहर भेजा गया था (फिर से, Fiddler माध्यम से) और मेरे सारे एम्परसेंड्स ( &quot; में) ताकि तरह &amp;quot; परिवर्तित हो:

&lt;SEARCHINFO-LIST&gt;&lt;SEARCH_INFO action=&amp;quot;add&amp;quot; 
status=&amp;quot;3&amp;quot; 
name=&amp;quot;TestProfileFromExternApp&amp;quot; mask=&amp;quot;0&amp;quot; 
campaign_id=&amp;quot;33&amp;quot; campaign_protected=&amp;quot;N&amp;quot; 
condition_protected=&amp;quot;N&amp;quot;&gt;&lt;CONDITIONS/&gt;&lt;EXPRESSIONS/&gt;&lt;/SEARCH_INFO&gt;&lt;/SEARCHINFO_LIST&gt; 

और, जैसा कि आप अनुमान लगा सकते हैं, प्राप्त करने वाली वेब सेवा "BZZT! के साथ वापस आ गई है!"।

मैंने सभी प्रकार के भागने और समान परिणामों के साथ अनुक्रमों को एन्कोड करने का प्रयास किया है। प्रभावी रूप से, मेरे सभी मैनिपुलेशन के बाद यह HttpUtility.HtmlEncode तार 0 से बाहर जाने से पहले और किसी भी स्ट्रिंग में एम्पर्सेंड &amp; में परिवर्तित हो जाता है। और उद्धरण (एकल या डबल) रूपांतरण में अनदेखा कर रहे हैं। और प्राप्त करने वाली वेब सेवा चाहता है कि उन उद्धरण &quot; कुत्ते के रूप में प्रदर्शित किए गए हैं, या यह पर जा रहा है और यह घर पर जाएं।

मेरे पिछले हताश आशा उन चीजों को सेट करने से पहले इसे तार के पास गया संदेश सही (मैंने सोचा) को पकड़ने के लिए इससे पहले कि यह BeforeSendRequest घटना में IClientMessageInspector to implement message inspection का उपयोग कर तार पर चला गया था ... और मैन्युअल

मैं संदेश को ठीक से कैप्चर करता हूं। मैं मैन्युअल रूप से &quot; में भी डाल सकता हूं।

लेकिन जब यह भेजा जाता है, तो वायरसहार्क और फिडलर दोनों मुझे आश्वस्त करते हैं कि यह अच्छी तरह से स्वरूपित हो रहा है ... उद्धरण के साथ मैं छुटकारा पाने की कोशिश कर रहा हूं।

<xmlData xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
&lt;SEARCHINFO-LIST&gt;&lt;SEARCH_INFO action="add" status="3" 
name="TestProfileFromExternApp" mask="0" campaign_id="33" campaign_protected="N" 
condition_protected="N"&gt;&lt;CONDITIONS/&gt;&lt;EXPRESSIONS/&gt; 
&lt;/SEARCH_INFO&gt;&lt;/SEARCHINFO_LIST&gt;</xmlData> 

मैं अपने wits अंत में हूँ। मैं [छोटे cuddly बात][vile देवता] के बदले या मेरे [आत्मा/दिल/बेटे के बायोनैक संग्रह] को बेचने के लिए किसी भी सुझाव को स्वीकार करूँगा। मेरा विश्वास करो, यह कम बुरा होगा।

नीचे अनुरोध के अनुसार, यहां उत्पन्न संदेश ठूंठ है:

public int SetCondition(string sharedSecret, string xmlData, out string resultValue) 
{ 
    tzGui.tzCampaign.SetConditionRequest inValue = new tzGui.tzCampaign.SetConditionRequest(); 
    inValue.sharedSecret = sharedSecret; 
    inValue.xmlData = xmlData; 
    tzGui.tzCampaign.SetConditionResponse retVal = ((tzGui.tzCampaign.CampaignSoapPort)(this)).SetCondition(inValue); 
    resultValue = retVal.resultValue; 
    return retVal.Result; 
} 

(मुझे लगता है कि यह आप ... के लिए क्या पूछ रहे थे है) और यह इस प्रकार कहा जाता हो रही है:

void SetConditionTask() 
{ 
    //ok, now we *try* and create a new profile 
    var tzCampaignCxn = new tzCampaign.CampaignSoapPortClient("CampaignSoapBinding"); 
    //no worky 
    //string xmlData = "<SEARCHINFO-LIST><SEARCH_INFO action=\"add\" status=\"3\" name=\"TestProfileFromExternApp\" mask=\"0\" campaign_id=\"33\" campaign_protected=\"N\" condition_protected=\"N\"><CONDITIONS/><EXPRESSIONS/></SEARCH_INFO></SEARCHINFO_LIST>"; 

    //this one doesn't work 
    //string xmlData = "<SEARCHINFO-LIST><SEARCH_INFO action=<![CDATA[ &quot; ]]>add<![CDATA[ &quot; ]]> status=<![CDATA[ &quot; ]]>3<![CDATA[ &quot; ]]> name=<![CDATA[ &quot; ]]>TestProfileFromExternApp<![CDATA[ &quot; ]]> mask=<![CDATA[ &quot; ]]>0<![CDATA[ &quot; ]]> campaign_id=<![CDATA[ &quot; ]]>33<![CDATA[ &quot; ]]> campaign_protected=<![CDATA[ &quot; ]]>N<![CDATA[ &quot; ]]> condition_protected=<![CDATA[ &quot; ]]>N<![CDATA[ &quot; ]]>><CONDITIONS/><EXPRESSIONS/></SEARCH_INFO></SEARCHINFO_LIST>"; 

    //this one doesn't either 
    string xmlData = "<SEARCHINFO-LIST><SEARCH_INFO action=&quot;add&quot; status=&quot;3&quot; name=&quot;TestProfileFromExternApp&quot; mask=&quot;0&quot; campaign_id=&quot;33&quot; campaign_protected=&quot;N&quot; condition_protected=&quot;N&quot;><CONDITIONS/><EXPRESSIONS/></SEARCH_INFO></SEARCHINFO_LIST>"; 

    string createProfileResultVal = string.Empty; 
    tzCampaignCxn.SetCondition(SharedSecret, xmlData, out createProfileResultVal); 
    txtResults.AppendText(Environment.NewLine + Environment.NewLine + createProfileResultVal); 
    } 
+1

बात यह है: ' ..." ... 'पूरी तरह से मान्य एक्सएमएल है। हालांकि यह प्रतिबंधित नहीं है, डबल कोट्स को एक्सएमएल टेक्स्ट नोड्स में भागने की आवश्यकता नहीं है। यदि आपकी यह पसंद नहीं है तो आपकी वेब सेवा मानक एक्सएमएल नहीं बोलती है। – dtb

+0

आप बिल्कुल सही हैं ~ वे पूरी तरह मान्य हैं। लेकिन तार पर " डालने का मेरे लिए एक तरीका होना चाहिए ... सही? (ओह, और दुर्भाग्य से यह मेरी वेब सेवा नहीं है ... ओह, लेकिन अगर यह था ...!) :) –

+0

एक रास्ता है। आप डब्ल्यूसीएफ के हर पहलू के साथ गड़बड़ कर सकते हैं और अपने स्वयं के कार्यान्वयन के साथ भागों को प्रतिस्थापित कर सकते हैं ... क्या आप हमें जेनरेट की गई घोषणा घोषणा और आप इसे कैसे कॉल कर रहे हैं? मुझे एक साधारण समाधान के लिए एक विचार है लेकिन मुझे जांच करने की ज़रूरत है। – dtb

उत्तर

0

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

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

मैं एक कूबड़ है, हालांकि, यह है कि अगर आप इसे अपने स्ट्रिंग पैरामीटर में CDATA टैग <![CDATA[*yourstring*]]> में चारों ओर, उस के लिए मार्कअप तार पर छोड़ दिया जाएगा और के रूप में &lt;![[*yourstring-XML-element-encoded*]]&gt;

दूसरे छोर तक पहुंच जाते हैं कि मामला, आप क्या कर सकते हैं जो वीएस सेवा संदर्भ जेनरेटर द्वारा स्वचालित रूप से जेनरेट किया गया था ताकि प्रॉक्सी पर विधि कॉल का पैरामीटर प्रकार मूल रूप से स्ट्रिंग के समान ही स्वीकार कर सके, लेकिन स्वयं को क्रमबद्ध करता है एक सीडीएटीए अनुभाग के रूप में। another question here का उत्तर देने के लिए मार्क ग्रेवेल द्वारा लिखे गए कोड के आधार पर ऐसा एक प्रकार प्रदान किया जाता है। ऐसा करने में समस्या यह होगी कि यदि कोई उस सेवा संदर्भ पर वीएस में 'अद्यतन संदर्भ' कमांड का उपयोग करता है, तो आपके द्वारा किए गए कोई भी परिवर्तन खो जाएंगे।

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

+0

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

+0

एमएमएम ... अब यह * बिल्कुल * जैसा दिखता है मुझे पसंद है। मैं इसे आज़मा दूंगा ... –

+0

स्ट्रिंग xmlData को सीडीटाएप्रैपर में सभी संदर्भों को बदलने का प्रयास किया और ऐसा लगता है कि यह जा रहा था, लेकिन फिर: {"xmlData 'को प्रतिबिंबित करने में त्रुटि हुई।"} " प्रकार tzGui.CDataWrapper को SOAP- एन्कोडेड संदेशों के साथ क्रमबद्ध नहीं किया जा सकता है। अपने संदेश के लिए उपयोग को लिटल में सेट करें। " मैंने अभियान = एसएसडीएल (जैसे) में उपयोग = उच्चारण करने के लिए एन्कोड किया = ***<साबुन: शरीर का उपयोग = "शाब्दिक" नामस्थान = "http://tempuri.org/message/" एन्कोडिंग स्टाइल = "http://schemas.xmlsoap.org/soap/encoding/" parts = "sharedSecret xmlData" /> *** वही त्रुटि। शायद मैंने इसे सही जगह में नहीं बदला? –

2

यदि मैं आपकी लंबी पोस्ट को समझता हूं, तो आप स्ट्रिंग का उपयोग करके अपने एक्सएमएल के कुछ हिस्सों का निर्माण कर रहे हैं। ऐसा मत करो। एक्सएमएल बनाने के लिए हमेशा एक्सएमएल एपीआई में से एक का उपयोग करें। यह उद्धरण नियमों को जानता है।

0

मैंने कभी काम नहीं किया कि इसे कैसे काम किया जाए। हालांकि, मुझे एक समाधान मिला। एक बदसूरत, हैकिश समाधान है कि मुझे गर्व नहीं है। लेकिन यह काम किया।

वंशावली के हित में, आखिर में मैंने जो किया। (10ish) के प्रत्येक कॉल के लिए मैं बनाने के लिए आवश्यक है, मैं बस Fiddler के माध्यम से सोप कॉल पर कब्जा कर लिया है, और फिर एक त्वरित लिखा खोज-एन-की जगह नियमित

public string Newrule(string ruleName, DecisionSet decisionSet) 
    { 
     var soapString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><SOAP-ENV:Envelope " + 
         "xmlns:SOAPSDK1=\"http://www.w3.org/2001/XMLSchema\" xmlns:SOAPSDK2=\"http://www.w3.org/2001/XMLSchema-instance\" " + 
         "xmlns:SOAPSDK3=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">" + 
         "<SOAP-ENV:Body><SOAPSDK4:SetCondition xmlns:SOAPSDK4=\"http://tempuri.org/message/\"><sharedSecret></sharedSecret>" + 
         "<xmlData>&lt;SEARCHINFO_LIST&gt;&lt;SEARCH_INFO action=&quot;add&quot; status=&quot;3&quot; " + 
         "name=&quot;" + ruleName + "&quot; mask=&quot;0&quot; DecisionSet_id=&quot;" + decisionSet.Id + 
         "&quot; DecisionSet_protected=&quot;N&quot; " + 
         "condition_protected=&quot;N&quot;&gt;&lt;CONDITIONS/&gt;&lt;EXPRESSIONS/&gt;&lt;/SEARCH_INFO&gt;&lt;/SEARCHINFO_LIST&gt;" + 
         "</xmlData></SOAPSDK4:SetCondition></SOAP-ENV:Body></SOAP-ENV:Envelope>"; 

     var headerUrl = "http://tempuri.org/action/DecisionSet.SetCondition"; 
     var serviceUrl = "/webservice/DecisionSet.WSDL"; 
     var result = sender.MakeRequest(soapString, serviceUrl, headerUrl,null); 
     var idSearch = @"SEARCH_INFO id=&quot;(\d+)&quot;"; 

     var ruleId = Regex.Match(result, idSearch).Groups[1].Value; 

     return ruleId; 
    } 

यह एक http कॉल करने के लिए एक सरल दिनचर्या बुलाया उपयुक्त शीर्षलेख के साथ। सुरुचिपूर्ण, लेकिन यह काम किया।

public string MakeRequest(string requestString, string serviceUrl, string headerUrl, string useragent) 
    { 
     string query = requestString.Replace(@"<sharedSecret></sharedSecret>", "<sharedSecret>"+secret+"</sharedSecret>"); 
     query = query.Replace(@"<SessionID></SessionID>", "<SessionID>" + secret + "</SessionID>"); 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(server + serviceUrl); 
     //if (proxy != null) req.Proxy = new WebProxy(proxy, true); 
     req.Headers.Add("SOAPAction", headerUrl); 
     if (useragent == null) 
      req.UserAgent = "SOAP Toolkit 3.0"; 
     else 
     { 
      req.UserAgent = useragent; 
     } 
     req.ContentType = "text/xml;charset=\"utf-8\""; 
     req.Accept = "text/xml"; 
     req.Method = "POST"; 
     Stream stm = req.GetRequestStream(); 

     StreamWriter sw = new StreamWriter(stm); 
     sw.Write(query); 
     sw.Flush(); 
     stm.Close(); 
     WebResponse resp = req.GetResponse(); 
     stm = resp.GetResponseStream(); 
     StreamReader r = new StreamReader(stm); 
     string response = (r.ReadToEnd()); 

     return response; 
    } 
संबंधित मुद्दे