में पैरामीटर प्राप्त करने और जवाब देने से इंकार कर देती है मैं जेसन प्रारूप में एक सी # एप्लिकेशन से एक वेब सेवा (.asmx) को कॉल करने का प्रयास कर रहा हूं।वेब सेवा जेएसओएन
जब मैं अनुरोध विधि निर्दिष्ट करता हूं, और सामग्री टाइप निर्दिष्ट नहीं करता हूं।
(अनुरोध HttpWebRequest है)
req.Method = "GET";
सब कुछ अच्छी तरह से काम करता है, लेकिन मैं XML प्रतिक्रिया मिलता है।
जब मैं सामग्री प्रकार निर्दिष्ट करें:
req.ContentType = "application/json; charset=utf-8";
मैं
500 आंतरिक सर्वर त्रुटि मिलता है।
जब मैं अनुरोध पद्धति को बदलने:
req.Method = "POST";
मैं parameterless तरीकों केवल कॉल कर सकते हैं, जो सही ढंग से json देता है, लेकिन अगर मैं मानकों के साथ एक विधि बुला की कोशिश, मैं फिर से 500 त्रुटि मिलती है।
वेब सेवा कोड:
[WebMethod(EnableSession =true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string SimplestWebService()
{
return "hello";
}
और साथ पैरामीटर:
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string Echo(string aString)
{
return aString;
}
कोई भी विचार बहुत सराहना की जाएगी।
जोड़ा गया: शायद मैं POST अनुरोध सही नहीं लिख रहा हूं (अब मैं इसे हेडर में भेज रहा हूं, बस एक जीईटी अनुरोध की तरह)। क्या कोई व्यक्ति इसके बारे में मेरा मार्गदर्शन कर सकता है?
मोड कहा: वेब साइट वास्तव में स्क्रिप्ट के रूप में चिह्नित किया गया है:
[ScriptService]
public class MyAPI : System.Web.Services.WebService
और यहाँ है कैसे मैं अपने पोस्ट अनुरोध निर्माण (मैं वास्तव में यही समस्या है पर विश्वास करने के लिए करते हैं):
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(methodUrl.ToString());
req.Method = "POST";
req.Headers.Add("aString","oren");
req.ContentLength = 0;
...
req.ContentType = "application/json; charset=utf-8";
req.Accept = "application/json; charset=utf-8";
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
StreamReader sr = new StreamReader(res.GetResponseStream());
result.Append(sr.ReadToEnd());
}
...
भी करने की कोशिश की:
req.Method = "POST";
string postData = "aString=kjkjk";
req.ContentType = @"application/json; charset=utf-8";
req.Accept = @"application/json; charset=utf-8";
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] byte1 = encoding.GetBytes(postData);
req.ContentLength = byte1.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(byte1, 0, byte1.Length);
newStream.Close();
दो पिछले नोटों:
1. यह वेब सेवा ब्राउज़र का उपयोग कर एक्सएमएल में काम करती है।
2. जेसन के लिए पूछे जाने पर, कोड वेब सेवा पर ब्रेक पॉइंट तक कभी नहीं पहुंचता है। तो यह संभवतः एक आईआईएस (मैं आईआईएस 6.1 का उपयोग कर रहा हूं) मुद्दा है। मैंने एमआईएमई प्रकार की सिफारिश here की कोशिश की है।
बहुत बहुत धन्यवाद।
क्या आप कोड शामिल कर सकते हैं जहां आप आउटगोइंग अनुरोध को कॉन्फ़िगर करते हैं? विशेष रूप से, आप "aString" पैरामीटर कैसे जोड़ रहे हैं? इससे समस्या को डीबग करने में मदद मिल सकती है। – mikemanne
इसके अलावा, एएसएमएक्स वर्ग स्वयं ही टैग की गई है: [स्क्रिप्ट सेवा]? मुझे लगता है कि (100% निश्चित नहीं) POST-mod अनुरोधों और JSON- स्वरूपित डेटा का उपयोग कर webservice तक पहुंचने के लिए आवश्यक है। – mikemanne
@ मिकमैन: इनपुट के लिए बहुत बहुत धन्यवाद। अपडेट किया गया। –