Sto provando a verificare le chiamate al servizio Web utilizzando una pagina ASP.NET che crea un modulo con i campi nome utente e password e un pulsante "Invia". (Sia jQuery che il file .js che sto utilizzando sono inclusi nei tag script nell'elemento head.)Chiamare il servizio web sul server esterno da javascript utilizzando asp.net e C#
Il pulsante "Invia" chiama una funzione creata nel codice C# dietro il file che effettua una chiamata a un JavaScript separato file.
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);
}
La funzione JavaScript, Authenticate
, fa chiamata di servizio web, utilizzando jQuery e Ajax, a un altro server, l'invio di parametri JSON e in attesa di tornare in risposta 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;
}
Tuttavia, poiché il servizio web che sto chiamando si trova su un server diverso da quello dei, C# e ASP.NET file JavaScript, non sto ricevendo un avviso di statusText
o responseText
.
In qualche modo, non viene inviato nulla al servizio Web e non ricevo nulla indietro, nemmeno un errore. Ho provato a inserire una funzione nell'attributo beforeSend
, ma non è stato attivato. C'è un modo speciale che devo gestire chiamando un servizio web fuori server?
AGGIORNAMENTO!
Su consiglio di jjnguy, Janie e Nathan, ora sto provando una chiamata lato server al servizio Web utilizzando HttpWebRequest. Usando un po 'del codice di jjnguy e del codice da this question, sono arrivato a questo.
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);
}
Tuttavia, sto ottenendo un errore di (400) Bad Request
dal server remoto quando si tenta di ottenere la risposta dal mio HttpWebRequest. Il valore della proprietà Response dell'eccezione indica {System.Net.HttpWebResponse}
e il valore della proprietà Status è ProtocolError
. Sono abbastanza sicuro perché l'URL sta usando il protocollo SSL HTTP. Cosa posso fare per ovviare a questo, oltre ad avere l'URL della pagina ASP.NET iniziare con HTTPS (non un'opzione)?
Questa è una soluzione in stile Rube Goldberg, è necessario semplificare notevolmente. – Janie
concordato. Sono felice che siamo sulla stessa pagina. – jjnguy
Riesci a vedere il servizio dal browser? – Janie