を使用してJavaScriptを使用して外部のサーバー上でwebserviceを呼び出してください。ユーザー名とパスワードのフィールドと「送信」ボタンを含むフォームを作成するASP.NETページを使用してWebサービス呼び出しをテストしようとしています。 (私が使用しているjQueryと.jsファイルは、head要素のscriptタグに含まれています)。asp.netとC#
「送信」ボタンは、C#コードビハインドファイルで作成された別のJavaScriptファイル。
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
、JSONパラメータを送信し、応答に戻ってJSONを期待して、別のサーバーへのjQueryとAjaxを使用して、Webサービスの呼び出しを行います。私が呼んでいるWebサービスはASP.NET、C#とJavaScriptファイルとは別のサーバー上にあるため
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;
}
しかし、私はstatusText
またはresponseText
警告が届きません。
どういうわけか、何もWebサービスに送信されていないため、何も返されません。エラーでもありません。私はbeforeSend
属性に関数を入れようとしましたが、それは起動しませんでした。オフサーバのWebサービスの呼び出しを処理する特別な方法はありますか?
UPDATE! jjnguy、Janieとネイサンのアドバイスで
、私は今のHttpWebRequestを使用してWebサービスにサーバー側の呼び出しをしようとしています。 jjnguyのコードの一部とthis questionのコードを使って、私はこれを思いついた。私は私のHttpWebRequestのからの応答を取得しようとすると、
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
エラーを取得しています。例外のResponseプロパティの値は{System.Net.HttpWebResponse}
で、Statusプロパティの値はProtocolError
です。 URLがHTTP SSLプロトコルを使用しているためですASP.NETページURLが(オプションではなく)HTTPSで始めるのではなく、これを回避するために何ができるのですか?
これはRube Goldbergスタイルのソリューションであり、大幅に簡素化する必要があります。 – Janie
合意。私たちは同じページにいるとうれしいです。 – jjnguy
ブラウザからサービスを見ることができますか? – Janie