2011-06-06 3 views
5

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

मैं शरीर में एक्सएमएल को POST विधि में पास करने की कोशिश कर रहा हूं, लेकिन जब मैं अपने क्लाइंट को चलाता हूं, तो यह बस लटकता है।

यह ठीक काम करता है जब मैं यूरी के हिस्से के रूप में पैरामीटर को स्वीकार करने के लिए सेवा बदलता हूं। (जब मैं "getString" से "getString/{xmlString}" में UriTemplate को बदलता हूं और स्ट्रिंग पैरामीटर पास करता हूं)।

मैं नीचे दिए गए कोड को चिपका रहा हूं।

सेवा

[ServiceContract] 
public interface IXMLService 
{ 
    [WebInvoke(Method = "POST", UriTemplate = "getString", BodyStyle=WebMessageBodyStyle.WrappedRequest, 
    RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)] 

    [OperationContract] 
    string GetXml(string xmlstring); 
} 

// implementaion कोड

public class XMLService : IXMLService 
{ 
    public string GetXml(string xmlstring) 
    { 
     return "got 1"; 
    } 
}  

ग्राहक

string xmlDoc1="<Name>";   
xmlDoc1 = "<FirstName>First</FirstName>"; 
xmlDoc1 += "<LastName>Last</LastName>"; 
xmlDoc1 += "</Name>"; 

HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create(@"http://localhost:3518/XMLService/XMLService.svc/getstring"); 
request1.Method = "POST"; 
request1.ContentType = "application/xml"; 
byte[] bytes = Encoding.UTF8.GetBytes(xmlDoc1);   
request1.GetRequestStream().Write(bytes, 0, bytes.Length); 

Stream resp = ((HttpWebResponse)request1.GetResponse()).GetResponseStream(); 
StreamReader rdr = new StreamReader(resp); 
string response = rdr.ReadToEnd(); 

किसी का कहना है कृपया सकते हैं जो इसमें गलत क्या है?

+0

यदि आप पैरामीटर के रूप में स्ट्रिंग के बजाय 'XElement' का उपयोग करते हैं तो यह बदल जाएगा? अनुरोध के 'सामग्री-लंबाई' भी सेट करें। –

+0

आपके उत्तर के लिए धन्यवाद। मैंने XElement का उपयोग करने का प्रयास किया। कोई भाग्य नहीं!! – sumi

उत्तर

8

एक XElement और नंगे

की Bodystyle उपयोग करने के लिए आपके ऑपरेशन अनुबंध बदलें
[WebInvoke(Method = "POST", 
    UriTemplate = "getString", 
    BodyStyle = WebMessageBodyStyle.Bare, 
    RequestFormat = WebMessageFormat.Xml, 
    ResponseFormat = WebMessageFormat.Xml)] 
[OperationContract] 
string GetXml(XElement xmlstring); 

साथ ही मैं आपको संदेह ग्राहक कोड होना चाहिए (ध्यान दें पहला + =):

string xmlDoc1="<Name>"; 
xmlDoc1 += "<FirstName>First</FirstName>"; 
xmlDoc1 += "<LastName>Last</LastName>"; 
xmlDoc1 += "</Name>"; 
0

मेरा मानना ​​है कि समस्या यह है कि आप स्थापित कर रहे हैं WrappedRequest को BodyStyle जो आपके भेजे एक्सएमएल की आवश्यकता होगी जो भी नाम स्थान आपकी सेवा अनुबंध में परिभाषित किया गया है में एक <GetXml> तत्व में लिपटे जा रहा है। आप BodyStyleBare और प्रयोग करने में सेट करते हैं @Ladislav Mmka के रूप में XElement टिप्पणी में सुझाव दिया है कि आप जाने के लिए अच्छा होना चाहिए।

0

आपको उचित XML एक्सएमएल क्रमबद्धता नामस्थान के साथ <string/> टैग में अपनी XML स्ट्रिंग को लपेटने की आवश्यकता है। एसओ पर पहले इस प्रश्न का उत्तर दिया गया है, लेकिन मुझे इस समय यह नहीं मिल रहा है।

1

तुम अब भी जरूरत है कक्षा बनाने के लिए:

public class Test 
{ 

    public string xmlstring{ get; set; } 

} 

आप सिडियलाइज्ड एक्सएम की जांच करने के लिए फिडलर का भी उपयोग कर सकते हैं एल पैरामीटर के रूप में पारित किया जा सकता है।