का उपयोग कर जावास्क्रिप्ट से बाहरी सर्वर पर कॉल webservice पर कॉल करें, मैं एक एएसपी.NET पृष्ठ का उपयोग कर वेब सेवा कॉल का परीक्षण करने की कोशिश कर रहा हूं जो उपयोगकर्ता नाम और पासवर्ड फ़ील्ड और "सबमिट" बटन के साथ एक फॉर्म बनाता है। (JQuery और .js फ़ाइल दोनों का उपयोग मैं मुख्य तत्व में स्क्रिप्ट टैग में शामिल कर रहा हूं।)एएसपीनेट और सी #
"सबमिट" बटन फ़ाइल के पीछे सी # कोड में बनाए गए फ़ंक्शन को कॉल करता है जो एक अलग जावास्क्रिप्ट को कॉल करता है फ़ाइल।
protected void mSubmit_Click(object sender, EventArgs eventArgs)
{
String authenticate = String.Format("Authentication(\"{0}\",\"{1}\");", this.mUsername.Text,this.mPassword.Text);
Page.ClientScript.RegisterStartupScript(this.GetType(), "ClientScript", authenticate, true);
}
JavaScript फ़ंक्शन, Authenticate
, वेब सेवा कॉल करता है, jQuery और अजाक्स का उपयोग, एक अलग सर्वर के लिए, JSON मापदंडों भेजने और जवाब में वापस JSON उम्मीद।
function Authentication(uname, pwd) {
//gets search parameters and puts them in json format
var params = '{"Header":{"AuthToken":null,"ProductID":"NOR","SessToken":null,"Version":1},"ReturnAuthentication":true,"Password":"' + pwd + '","Username":"' + uname + '",”ReturnCredentials”:false }';
var xmlhttp = $.ajax({
async: false,
type: "POST",
url: 'https://myHost.com/V1/Identity/Authenticate',
data: params,
contentType: 'application/json'
});
alert(xmlhttp.statusText);
alert(xmlhttp.responseText);
return;
}
हालांकि, क्योंकि वेब सेवा मैं फोन कर रहा हूँ ASP.NET, सी # और JavaScript फ़ाइलों तुलना में एक अलग सर्वर पर है, मैं नहीं एक statusText
या responseText
चेतावनी हो रही है।
किसी भी तरह, वेब सेवा पर कुछ भी नहीं भेजा जा रहा है और मुझे कुछ भी वापस नहीं मिल रहा है, यहां तक कि कोई त्रुटि भी नहीं। मैंने beforeSend
विशेषता में एक फ़ंक्शन डालने का प्रयास किया, लेकिन यह आग नहीं लगा। क्या ऑफ-सर्वर वेब सेवा को कॉल करने के लिए मुझे एक विशेष तरीका चाहिए?
अद्यतन!
jjnguy, जेनी और नेथन की सलाह पर, अब मैं HttpWebRequest का उपयोग कर वेब सेवा के लिए सर्वर साइड कॉल करने का प्रयास कर रहा हूं। Jjnguy के कोड के साथ-साथ this question से कोड का उपयोग करके, मैं इसके साथ आया हूं।
public static void Authenticate(string pwd, string uname)
{
string ret = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://myhost.com/V1/Identity/Authenticate");
request.ContentType = "application/json";
request.Method = "POST";
string data = "{\"Header\":{\"AuthToken\":null,\"ProductID\":\"NOR\",\"SessToken\":null,\"Version\":1},\"ReturnAuthentication\":true,\"Password\":\"" + pwd + "\",\"Username\":\"" + uname + "\",\"ReturnCredentials\":false }'";
byte[] byteData = UTF8Encoding.UTF8.GetBytes(data);
request.ContentLength = byteData.Length;
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (response)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
// Console application output
ret = reader.ReadToEnd();
}
Console.WriteLine(ret);
}
हालांकि, मैं दूरस्थ सर्वर से एक (400) Bad Request
त्रुटि जब मैं अपने HttpWebRequest से प्रतिक्रिया प्राप्त करने की कोशिश हो रही है। अपवाद की प्रतिक्रिया संपत्ति का मूल्य {System.Net.HttpWebResponse}
कहता है और स्थिति संपत्ति का मूल्य ProtocolError
है। मुझे यकीन है कि ऐसा इसलिए है क्योंकि यूआरएल HTTP एसएसएल प्रोटोकॉल का उपयोग कर रहा है। एएसपी.NET पृष्ठ यूआरएल HTTPS के साथ शुरू होने के अलावा (विकल्प नहीं) के अलावा, मैं इसके आसपास क्या करने के लिए क्या कर सकता हूं?
यह एक रूबे गोल्डबर्ग शैली समाधान है, आपको बहुत सरलता की आवश्यकता होगी। – Janie
सहमत हुए। मुझे खुशी है कि हम एक ही पृष्ठ पर हैं। – jjnguy
क्या आप ब्राउज़र से सेवा देख सकते हैं? – Janie